Flask应用程序将环境变量作为对象而不是从os.getenv返回的字符串输出

问题描述 投票:0回答:1

我的main.py中有以下代码段:

import os
from app import create_app
from models import db, bcrypt
if __name__ == '__main__':
    HOST = os.environ.get('SERVER_HOST', 'localhost')
    try:
        PORT = int(os.environ.get('SERVER_PORT', '5555'))
    except ValueError:
        PORT = 5555
    env_name = os.getenv('FLASK_ENV', "Please set FLASK_ENV")
    print("env_name: ", env_name)
    app = create_app(env_name)

我在flask run中使用pipenv shell运行它,并在打印出env_name的行中遇到以下错误。我已经尝试了set FLASK_ENV=development(Windows 10)和使用.env,但无济于事。我使用python-3.8.3

(src-4Nvvrxp5) C:\Projects\Python\PythonFlaskRestAPI\src>flask run
 * Serving Flask app "main.py" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Restarting with stat
env_name: <flask.cli.ScriptInfo object at 0x000002D6BA598940>
 * Debugger is active!
 * Debugger PIN: 269-678-937
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

任何建议和见识都受到赞赏。

python-3.x flask environment-variables pipenv
1个回答
0
投票

因此,经过进一步的研究,我能够(在某种程度上)在本地重现您的问题。如下图所示。

enter image description here

现在发生这种情况的原因是来自烧瓶官方documentation的本段:

enter image description here

您要关注的是这个:

如果应用程序工厂仅接受一个参数,并且工厂名称后没有括号,则将[[ScriptInfo实例传递作为位置参数。

因此,没有发生错误,该代码正在按预期方式工作。

现在,如果您担心的是(set FLASK_ENV = development)命令没有正确设置它的事实,那么我要指出的是,它的确设置正确,如您在OP中所见:

(src-4Nvvrxp5) C:\Projects\Python\PythonFlaskRestAPI\src>flask run * Serving Flask app "main.py" (lazy loading) * Environment: development * Debug mode: on * Restarting with stat

上面终端中的第三行显示“ * Environment:development”,而根据documentation的默认值为“ * Environment:production”

让我知道这是否解决了您的疑虑和疑问:D。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.