【问题标题】:flask run not finding module import but works with gunicorn烧瓶运行未找到模块导入但可与 gunicorn 一起使用
【发布时间】:2022-01-22 16:13:08
【问题描述】:

像这样启动 Flask 时出现模块未找到错误:

$ python src/app/main.py

$ python src/app/main.py
Traceback (most recent call last):
  File "/home/james/code/webapp/src/app/main.py", line 3, in <module>
    from app.web import app_config
ModuleNotFoundError: No module named 'app'

目录:

src
 |- app    
 |- |- __init__.py
 |- |- main.py
 |- |- web
 |- |- |- __init__.py
 |- |- |- app_config.py

main.py:

from flask import Flask

from app.web import app_config


app = Flask(__name__)


@app.get("/ping")
def ping():

    return "pong"

if __name__ == "__main__":

    app.run(debug=True)

但如果我用 gunicorn 启动它就可以了:

$  gunicorn app.main:app
[2022-01-22 15:28:58 +0000] [148] [INFO] Starting gunicorn 20.1.0
[2022-01-22 15:28:58 +0000] [148] [INFO] Listening at: http://127.0.0.1:8000 (148)
[2022-01-22 15:28:58 +0000] [148] [INFO] Using worker: sync
[2022-01-22 15:28:58 +0000] [150] [INFO] Booting worker with pid: 150

为什么直接从终端运行 Flask 不让它找到更高级别的目录模块?

【问题讨论】:

    标签: python flask gunicorn


    【解决方案1】:

    由于Module Search Path of Python,找不到app 模块。它尝试从main.py 的目录导入。

    如果您不想更改任何内容,请将cd 放入src/ 目录,然后从那里使用“模块方法”运行应用程序:

    $ python -m app.main
    

    第二种方法:将from app.web import app_config这一行改成from web import app_config,那么原来的python src/app/main.py就可以使用了,因为现在它是从main.py导入相对的。

    第三个选项:将src目录的完整路径添加到PYTHONPATH env var。

    【讨论】:

    • 谢谢,这很简洁,很有帮助。我相信这个答案会帮助许多其他人解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多