【问题标题】:How to run gunicorn on a file in directory?如何在目录中的文件上运行 gunicorn?
【发布时间】:2020-01-16 12:54:17
【问题描述】:

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

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

没有 --chdir 怎么办?

【问题讨论】:

标签: python flask gunicorn


【解决方案1】:

您已经列出了应该工作的模式——该参数是一个 python 模块的full dotted path,加上来自该模块的一个变量,它是一个应用程序对象。因此,如果我们有一个包含内容的文件 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 包 - 这意味着您需要在 myproject.xml 中有一个 __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包,但不支持虚线路径。
猜你喜欢
  • 2017-10-11
  • 2017-08-15
  • 2016-04-27
  • 2017-09-23
  • 1970-01-01
  • 2021-08-26
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多