flask 运行 未找到模块导入但可与 gunicorn 一起使用
flask run not finding module import but works with gunicorn
像这样启动 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 不让它找到更高级别的目录模块?
由于 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.
像这样启动 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 不让它找到更高级别的目录模块?
由于 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.