我有一个使用应用程序工厂的 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.modulea
和 packageb.moduleb
.您仍然无法导入 modulec
或 modulea
或 moduleb
没有完整的虚线路径。
关于python - 如何在目录中的文件上运行gunicorn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57944088/