Возможно ли запустить приложение пирамиды, не устанавливая его как яйцо? - PullRequest
1 голос
/ 14 июня 2019

Я создаю приложение, используя веб-фреймворк Pyramid, и во всей документации предполагается, что вы будете устанавливать приложение как яйцо, используя setup.py.Хотя это имеет смысл для распространяемого пакета, он добавляет много служебных и ненужных пакетов кода для приложения, которое не предназначено для совместного использования в качестве библиотеки или расширения.

Пирамида использует PasteDeploy для чтения приложенияфайлы конфигурации (.ini) и требует раздела для определения того, какое приложение должно быть запущено:

[app:blog]
use = egg:MyBlog#main
database = mysql://localhost/blogdb
blogname = This Is My Blog!

Это говорит загрузчику приложения импортировать библиотеку с именем MyBlog, найденную на PYTHONPATH, и использоватьточка входа с именем main, определенная в конфигурации setup.py.

Есть ли способ напрямую обратиться к приложению по пути и указать точку входа WSGI (аналогично тому, как вы запускаетеприложение напрямую через:

cd /path/to/MyBlog
gunicorn --bind etc... app:main

Существует дополнительный синтаксис, начинающийся с call:, который позволяет указать точку входа, которая не была зарегистрирована с setuptools:

[app:mythirdapp]
use = call:my.project:myapplication

Однако, похоже, что загрузчик все еще ожидает пакет, установленный по пути python, а не пустой пакет / исполняемый файл python.

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Возможно ли запустить приложение пирамиды, не устанавливая его как яйцо?

Да, вы можете найти множество примеров на сайте https://trypyramid.com/,Вы не обязаны использовать декларацию ini-style для запуска вашего WSGI-приложения.Например, вы можете создать myapp_wsgi.py файл:

from pyramid.paster import get_app, setup_logging
ini_path = 'production.ini'
setup_logging(ini_path)
application = get_app(ini_path, 'main')

и передать его gunicorn:

gunicorn myapp_wsgi:application

Более подробную информацию вы можете найти в modwsgi и gunicorn. с.

0 голосов
/ 14 июня 2019

Я действительно считаю, что метод call: может найти пакет, который не был установлен с использованием setuptools.Это связано с тем, что путь к Python начинается в текущем каталоге, поэтому, если вы запускаете свое приложение из каталога, в котором оно находится, все должно работать как положено.

Проблемы возникают, когда вы хотите создавать приложения, используя директиву [composite:].Было бы неплохо, если бы секции [app:] могли включать параметр directory = ..., который добавлял бы этот каталог к ​​пути python, но я думаю, что это скорее запрос функции, который нужно вызывать у PasteDeploy разработчиков ...

...