是否可以 运行 金字塔应用程序而无需将其安装为鸡蛋?

Is is possible to run a pyramid application without installing it as an egg?

我正在使用 Pyramid web 框架构建一个应用程序,在所有文档中,它假定您将使用 setup.py 将您的应用程序安装为 egg。虽然这对于可分发的包很有意义,但它会为不打算作为库或扩展共享的应用程序增加大量开销和不必要的打包代码。

Pyramid 使用 PasteDeploy 读取应用程序配置文件 (.ini) 并且需要一个部分来定义哪个应用程序是 运行:

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

这告诉应用程序加载器导入在 PYTHONPATH 上找到的名为 MyBlog 的库,并使用在 setup.py 中定义的名为 main 的入口点配置。

有什么方法可以通过路径直接引用应用程序并指定 WSGI 入口点(类似于您 运行 直接通过以下方式引用应用程序的方式:

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

还有一个以 call: 开头的附加语法,它允许您指定一个尚未在 setuptools 中注册的入口点:

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

但是,加载程序似乎仍希望在 python 路径上安装一个包,而不是裸露的 python package/executable.

我实际上认为 call: 方法能够找到尚未使用 setuptools 安装的软件包。这是因为 python 路径从当前目录开始,所以如果您从包含它的目录启动您的应用程序,那么一切都应该按预期工作。

当您想使用 [composite:] 指令编写应用程序时会出现问题。如果 [app:] 部分可以包含一个 directory = ... 参数,将那个目录添加到 python 路径,那会很好,但我想这更多的是用 [= 提出的功能请求15=] 开发人员...

Is it possible to run a pyramid application without installing it as an egg?

是的,您可以在 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 and gunicorn. 页面上找到更多信息。