我正在使用Pyramid Web框架构建应用程序,并且在所有文档中均假定您将使用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软件包/可执行文件。
答案 0 :(得分:1)
是否可以运行金字塔应用程序而无需将其安装为鸡蛋?
是的,是的,您可以在https://trypyramid.com/网站上找到很多示例。您无须对运行WSGI应用程序使用ini样式的声明。例如,您可以创建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
答案 1 :(得分:0)
我实际上认为call:
方法能够找到尚未使用setuptools
安装的软件包。这是由于python路径从当前目录开始,因此,如果从包含它的目录中启动应用程序,则所有内容都应按预期运行。
当您想使用[composite:]
指令编写应用程序时会出现问题。如果[app:]
部分可以包含一个directory = ...
参数,该参数会将目录添加到python路径,那就太好了,但是我想这更多是PasteDeploy
开发人员提出的功能请求...