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

Jib*_*hew 5 python flask gunicorn

我有一个使用应用程序工厂的烧瓶应用程序,我可以运行gunicorn,并且gunicorn "run:create_app()"工作正常。

但是,我想从它的父目录运行它,例如gunicorn "application.run:create_app"gunicorn "application/run:create_app"

没有--chdir 如何做到这一点?

Pau*_*tte 7

您已经列出了应该起作用的模式 - 该参数是full dotted pathpython 模块的 a ,加上该模块中作为应用程序对象的变量。parent_dir/myproject/uwsgi.py所以如果我们有一个包含内容的文件

from application import create_app
app = create_app()
Run Code Online (Sandbox Code Playgroud)

我们可以像这样运行gunicorn

# From myproject
gunicorn uwsgi:app
# from parent_dir
gunicorn myproject.uwsgi:app
Run Code Online (Sandbox Code Playgroud)

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

Python 将查找其 PYTHONPATH 上的任何目录。从那里开始,任何模块都将是顶级的,并且任何带有__init__.py文件的目录都将是包。默认行为是将当前目录添加到 PYTHONPATH 变量中。所以用下面的结构

foldera
    packagea
        __init__.py
        modulea.py
folderb
    packageb
        __init__.py
        moduleb.py
folderc
    packagec
         modulec.py
Run Code Online (Sandbox Code Playgroud)

foldera你可以做import packagea.modulea但不能做import packageb.modulebpackagea从您可以执行import modulea但不能执行的文件夹中import packagea.modulea(该包不在路径上!)。您无法folderc导入任何这些模块 - PYTHONPATH 上没有任何包或模块。如果您确实设置了export PYTHONPATH=foldera:folderb:folderc:$PYTHONPATH,则可以导入packagea.moduleaAND packageb.moduleb。您仍然无法导入modulecmoduleamoduleb没有完整的点路径。