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

时间:2019-06-14 17:35:35

标签: python web-applications pyramid

我正在使用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软件包/可执行文件。

2 个答案:

答案 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

您可以在modwsgigunicorn.页面上找到更多信息。

答案 1 :(得分:0)

我实际上认为call:方法能够找到尚未使用setuptools安装的软件包。这是由于python路径从当前目录开始,因此,如果从包含它的目录中启动应用程序,则所有内容都应按预期运行。

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