Jib*_*hew 5 python flask gunicorn
我有一个使用应用程序工厂的烧瓶应用程序,我可以运行gunicorn,并且gunicorn "run:create_app()"
工作正常。
但是,我想从它的父目录运行它,例如gunicorn "application.run:create_app"
或gunicorn "application/run:create_app"
没有--chdir 如何做到这一点?
您已经列出了应该起作用的模式 - 该参数是full dotted path
python 模块的 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.moduleb
。packagea
从您可以执行import modulea
但不能执行的文件夹中import packagea.modulea
(该包不在路径上!)。您无法folderc
导入任何这些模块 - PYTHONPATH 上没有任何包或模块。如果您确实设置了export PYTHONPATH=foldera:folderb:folderc:$PYTHONPATH
,则可以导入packagea.modulea
AND packageb.moduleb
。您仍然无法导入modulec
或modulea
或moduleb
没有完整的点路径。