Хотя не составляет большой трудности написать Pyramid-приложение (проект) с нуля, Pyramid имеет инструменты для инициализации кода нового приложения по выбранному шаблону, или, в терминологии Pyramid, каркасной структуре (scaffolds). Например, в поставке имеются каркасные структуры для проектов, использующих ZODB или SQLAlchemy.
Проект — это каталог, содержащий по крайней мере один пакет на Python.
Типичная структура каталога для небольшого проекта:
MyProject/
|-- CHANGES.txt
|-- development.ini
|-- MANIFEST.in
|-- myproject
| |-- __init__.py
| |-- static
| | |-- favicon.ico
| | |-- logo.png
| | `-- pylons.css
| |-- templates
| | `-- mytemplate.pt
| |-- tests.py
| `-- views.py
|-- production.ini
|-- README.txt
|-- setup.cfg
`-- setup.py
Приведённую структуру, как следует из документации, не следует сильно изменять,
так как это может помешать другим разработчикам быстро ориентироваться в коде
проекта. Тем не менее, растущий проект может потребовать некоторых изменений.
Например, виды, модели (если они используются) и тесты можно, разбив на модули,
перенести соответственно в подкаталоги views, models и tests (не забыв снабдить
их файлом __init__.py
).
Следует отметить, что Pyramid может работать с любым WSGI-сервером. Проекты, созданные по готовым каркасным структурам, используют сервер Waitress.
Список официальных шаблонов найти по адресу https://github.com/Pylons?q=cookiecutter.
starter
zodb
alchemy
Некоторые пакеты могут дополнять этот список, например Cornice (https://github.com/Cornices/cookiecutter-cornice).
См.также
Cookiecutter - утилита позволяющая создавать проекты из шаблонов.
Установка Linux:
$ sudo apt install cookiecutter
Установка через Python:
$ pip install cookiecutter --user
Установка через Nix:
$ nix-env -i cookiecutter
$ cookiecutter gh:Pylons/pyramid-cookiecutter-starter
project_name [Pyramid Scaffold]: myproject
repo_name [myproject2]: myproject
Select template_language:
1 - jinja2
2 - chameleon
3 - mako
Choose from 1, 2, 3 [1]: 3
===============================================================================
Documentation: https://docs.pylonsproject.org/projects/pyramid/en/latest/
Tutorials: https://docs.pylonsproject.org/projects/pyramid_tutorials/en/latest/
Twitter: https://twitter.com/PylonsProject
Mailing List: https://groups.google.com/forum/#!forum/pylons-discuss
Welcome to Pyramid. Sorry for the convenience.
===============================================================================
Change directory into your newly created project.
cd myproject
Create a Python virtual environment.
python3 -m venv env
Upgrade packaging tools.
env/bin/pip install --upgrade pip setuptools
Install the project in editable mode with its testing requirements.
env/bin/pip install -e ".[testing]"
Run your project's tests.
env/bin/pytest
Run your project.
env/bin/pserve development.ini
myproject/
├── CHANGES.txt
├── development.ini
├── MANIFEST.in
├── myproject
│ ├── __init__.py
│ ├── static
│ │ ├── pyramid-16x16.png
│ │ ├── pyramid.png
│ │ └── theme.css
│ ├── templates
│ │ ├── layout.mako
│ │ └── mytemplate.mako
│ ├── tests.py
│ └── views.py
├── production.ini
├── pytest.ini
├── README.txt
└── setup.py
3 directories, 15 files
$ cd myproject
$ python setup.py develop
Часть настоек проекта, которые часто меняются, находится в файле development.ini
.
$ pserve development.ini
Starting server in PID 16601.
serving on http://0.0.0.0:6543
Ниже показан пример настроек сервера. Сервер Waitress запустит
MyProject.main
по адресу 127.0.0.1
и порту 6543
.
development.ini
¶[server:main]
use = egg:waitress#main
host = 127.0.0.1
port = 6543
Для автоматического перезапуска сервера после изменения файлов нужно указать флаг --reload
.
$ pserve development.ini --reload
Starting subprocess with file monitor
Starting server in PID 16601.
serving on http://0.0.0.0:6543
Теперь, после изменения какого-либо из файлов .py
или .ini
, сервер
перезапустится автоматически.
development.ini changed; reloading...
-------------------- Restarting --------------------
Starting server in PID 16602.
serving on http://0.0.0.0:6543
После запуска приложения через pserve
, можно открыть страницу
http://localhost:6543/ в браузере.