簡體   English   中英

為什么在設置 FLASK_ENV 時 from flask.cli import main 會失敗?

[英]Why does from flask.cli import main fail when I set FLASK_ENV?

我已經按照這里的描述在虛擬環境中安裝了 Flask https://flask.palletsprojects.com/en/1.1.x/installation/#install-create-env

  • 創建一個目錄並在目錄中運行 python3 -m venv venv 以使用虛擬環境
  • 然后source venv/bin/activate 激活環境
  • 然后pip安裝燒瓶

然后我創建了一個像這里描述的腳本https://flask.palletsprojects.com/en/1.1.x/quickstart/

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

然后我添加了 export FLASK_APP=hello.py 並運行了 python3 -m flask run ,效果很好

python3 -m flask run
 * Serving Flask app "hello.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

但是當我更改 FLASK_ENV=development 並運行相同的命令時,我收到一個錯誤

python3 -m flask run
 * Serving Flask app "hello.py" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
/usr/local/opt/python/bin/python3.7: No module named flask

我取消設置 FLASK_ENV 並再次運行相同的命令,一切都像我第一次這樣做時一樣。

好吧,一種解決方案可能是不設置任何環境變量並僅使用 python 運行 Flask。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(debug=True)

然后你只需通過source env/bin/activate激活虛擬環境,然后運行python main.py

您還可以通過執行app.config['FLASK_ENV'] = 'development'在您的代碼中設置燒瓶環境,但我不推薦它,因為如果您要將 Flask 應用程序部署到 Heroku 或 GCP 等平台,它是不會按預期工作。

另一種方法是在根目錄的.flaskenv文件中設置環境變量:

$ touch .flaskenv 

然后在.flaskenv定義你的環境變量:

FLASK_APP=main.py
FLASK_ENV=development
FLASK_DEBUG=True

安裝python-dotenv以幫助加載環境變量:

$ pip3 install python-dotenv

在您的終端上,運行:

$ flask run

每次對應用程序進行更改時,自動重新加載都應該起作用。

暫無
暫無

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

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