【问题标题】:Is is possible to run a pyramid application without installing it as an egg?是否可以在不将其安装为鸡蛋的情况下运行金字塔应用程序?
【发布时间】:2019-06-14 17:35:35
【问题描述】:

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

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 包/可执行文件。

【问题讨论】:

    标签: python web-applications pyramid


    【解决方案1】:

    是否可以在不将其安装为鸡蛋的情况下运行金字塔应用程序?

    是的,您可以在https://trypyramid.com/ 网站上找到很多示例。你不必使用 ini 风格的声明来运行你的 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
    

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

    【讨论】:

    • 这绝对是我在生产中会做的事情,但对于开发来说,能够使用pserve 以及它查看文件和重新加载的能力会有所帮助。
    • 因为你提到了pserve,我只想说gist.github.com/mmerickel/ddcd86d3603979cac279d228e08716ce 基本上是 pserve 95% 功能的替代品,但适用于任何 wsgi 应用程序。
    【解决方案2】:

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

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

    【讨论】:

    • call: 协议内部使用 __import__ 函数,所以是的,您的项目必须在 PYTHONPATH 作为解决方法,您可以使用 env 像:env PYTHONPATH='/tmp/test' pserve app.ini or create .pth` 用户站点文件夹中的文件( python -m site --user-site) `
    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 2012-11-09
    • 2010-11-14
    • 2016-08-14
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多