Python 是否可以运行金字塔应用程序而不将其作为鸡蛋安装?
我正在使用Pyramid web框架构建一个应用程序,在所有文档中,它都假定您将使用Python 是否可以运行金字塔应用程序而不将其作为鸡蛋安装?,python,web-applications,pyramid,Python,Web Applications,Pyramid,我正在使用Pyramid web框架构建一个应用程序,在所有文档中,它都假定您将使用setup.py以鸡蛋的形式安装应用程序。虽然这对于一个可分发的包是有意义的,但它为一个不打算作为库或扩展共享的应用程序增加了大量开销和不必要的打包代码 Pyramid使用PasteDeploy读取应用程序配置文件(.ini),并需要一个部分来定义要运行的应用程序: [app:blog] use = egg:MyBlog#main database = mysql://localhost/blogdb blogn
setup.py
以鸡蛋的形式安装应用程序。虽然这对于一个可分发的包是有意义的,但它为一个不打算作为库或扩展共享的应用程序增加了大量开销和不必要的打包代码
Pyramid使用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--绑定等…应用程序:main
还有一个以call:
开头的附加语法,允许您指定未在setuptools
中注册的入口点:
[app:mythirdapp]
use = call:my.project:myapplication
但是,加载程序似乎仍然希望在python路径上安装一个包,而不是一个简单的python包/可执行文件。我实际上认为
调用:
方法能够找到一个未使用setuptools
安装的包。这是因为python路径在当前directo中启动因此,如果您从包含应用程序的目录启动应用程序,那么一切都应该按预期工作
使用[composite:
指令编写应用程序时会出现问题。如果[app:]
部分可以包括一个目录=…
参数,该参数将把该目录添加到python路径中,但我想这更像是一个需要与PasteDeploy
开发人员一起提出的功能请求
是否可以运行金字塔应用程序而不将其作为鸡蛋安装
是的,您可以在网站上找到许多示例。您不必使用ini样式声明来运行WSGI应用程序。例如,您可以创建myapp\u 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
您可以在和页面上找到更多信息。
调用:
协议内部使用\uuuu导入
函数,因此是的,您的项目必须位于PYTHONPATH
中,作为解决方法,您可以使用env,如:env PYTHONPATH='/tmp/test'pserve app.ini或在用户站点文件夹中创建.pth`文件(python-msite——用户站点
)“这肯定是我在生产中会做的,但对于开发来说,它有助于使用pserve
及其查看文件和重新加载的能力。因为你提到了pserve
,所以我就把它扔掉了,它基本上是pserve所有功能的95%替代品,但可以与任何wsgi应用程序一起使用。