python - 如何在目录中的文件上运行gunicorn?

标签 python flask gunicorn

我有一个使用应用程序工厂的 flask 应用程序,我可以将 gunicorn 运行为 gunicorn "run:create_app()"这工作得很好。

但是,我想从它的父目录运行它,比如 gunicorn "application.run:create_app"gunicorn "application/run:create_app"
如何在没有 --chdir 的情况下做到这一点?

最佳答案

你已经列出了应该工作的模式 - 该参数是 full dotted path到一个 python 模块,加上来自该模块的一个变量,它是一个应用程序对象。所以如果我们有一个文件 parent_dir/myproject/uwsgi.py与内容

from application import create_app
app = create_app()

我们可以像运行 gunicorn
# From myproject
gunicorn uwsgi:app
# from parent_dir
gunicorn myproject.uwsgi:app

现在,我怀疑您看到的问题是点分路径表示法要求父目录是一个 python 包——这意味着您需要有一个 __init__.py我的项目中的文件。否则解释器将不会在该文件夹中查找 python 文件以使其可导入。

Python 将查看其 PYTHONPATH 上的任何目录。从那里,任何模块都将是顶级的,任何带有 __init__.py 的目录都将是顶级的。文件将是包。默认行为是将当前目录添加到 PYTHONPATH 变量。所以具有以下结构
foldera
    packagea
        __init__.py
        modulea.py
folderb
    packageb
        __init__.py
        moduleb.py
folderc
    packagec
         modulec.py

来自 foldera你可以做 import packagea.modulea但不是 import packageb.moduleb .从文件夹 packagea你可以做 import modulea但不是 import packagea.modulea (包裹不在路径上!)。来自 folderc您无法导入任何这些模块 - PYTHONPATH 上没有任何包或模块。如果您确实设置了 export PYTHONPATH=foldera:folderb:folderc:$PYTHONPATH ,您可以导入 packagea.moduleapackageb.moduleb .您仍然无法导入 modulecmoduleamoduleb没有完整的虚线路径。

关于python - 如何在目录中的文件上运行gunicorn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57944088/

相关文章:

python - 在 split (和 Selenium )中使用隐藏的选择元素

django - Gunicorn、nginx(v 1.3.14)、django 和 gevent-socket.io,位于 dotcloud

django/gunicorn 应用重启

python - 如何在 linux 中为 python 3 安装模块 "qpoases"? (二次规划包)

python - 如何让 CPython 2.7 使用 __pycache__ 目录?

python - 从Python中的numpy数组输入获取 'Day of Year'数组

nginx - 为什么要在 Flask 应用程序中使用 uWSGI 和主管,而不仅仅是主管?

javascript - 将变量从 Flask HTML 模板传递到 JavaScript 文件以供使用

flask - 表单验证失败时重定向(Flask-WTForms)

django - 带有Upstart和Nginx的Gunicorn和Django