簡體   English   中英

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

主要.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 的模塊搜索路徑,找不到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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM