launch.json 中的环境变量在 运行 VS Code 上的 Flask 应用程序无法识别

Environment variables in launch.json not recognized when running Flask application on VS Code

下面显示的是我的 Flask 应用程序的 launch.json 文件中的代码。我在 "env": {} 部分定义了各种环境变量。但是,当我从 run.py 脚本 运行 我的 Flask 应用程序时,它似乎无法识别变量。尽管 "FLASK_DEBUG" 设置为 "1",应用程序仍然 运行 在 **Debug mode: off** 上运行。

有人知道为什么吗?

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Flask",
            "type": "python",
            "request": "launch",
            "module": "flask",
            "env": {
                "FLASK_APP": "run.py",
                "FLASK_ENV": "development",
                "FLASK_DEBUG": "1",
                "EMAIL_USER": "farmgo.project.21@gmail.com",
                "EMAIL_PASS": "password",
            },
            "args": [
                "run",
                //"--no-debugger"
            ],
            "jinja": true,
        }
    ],
}

如果我设置:

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

然后应用会在调试模式下 运行。但是,我仍然无法获取其他环境变量:

>>> import os
>>> print(os.environ.get('FLASK_DEBUG'))
None

在 flask 中管理环境变量的一个好方法是使用 .flaskenv 文件。您需要 python-dotenv 才能使用它,并且该文件需要位于项目的根目录中。

在您的 .flaskenv 文件中,只需像这样输入您的变量:

FLASK_APP=run.py
FLASK_ENV=development
FLASK_DEBUG=1

然后你可以使用 flask run 运行 flask 并且环境将被加载。

这样做意味着如果您在不同的机器上更改或加载项目,您可以跨 IDE 保留环境设置。

查看此处了解更多信息 -

launch.json 文件仅在 运行 您的应用程序通过 VS Code 的调试器时使用。

https://code.visualstudio.com/docs/python/debugging#_initialize-configurations:

Initialize configurations

A configuration drives VS Code's behavior during a debugging session. Configurations are defined in a launch.json file that's stored in a .vscode folder in your workspace.

既然你提到了

... I run my flask application from the run.py script, ...

并且您正在使用 Python shell

进行测试
>>> import os  
>>> print(os.environ.get('FLASK_DEBUG'))  
None 

意味着你永远不会使用 VS Code 的调试器,因此这些环境变量永远不会是 loaded/read.

我建议通过 VS Code tutorial on Python Debugging, especially the section on Flask Debugging。您已经完成了第一步,即使用 Flask 配置添加 launch.json 文件。这里的要点是 "module": "flask" 行并添加 "--no-debugger" arg:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "run-flask",
            "type": "python",
            "request": "launch",
            "module": "flask",
            "env": {
                "FLASK_APP": "run.py",
                "FLASK_ENV": "development",
                "FLASK_DEBUG": "1",
                "EMAIL_USER": "farmgo.project.21@gmail.com",
                "EMAIL_PASS": "password",
            },
            "args": [
                "run",
                "--no-debugger"
            ],
            "jinja": true,
        },
    ]
}

然后只需 select 调试器下拉列表中的配置:

使用一些快速入门 Flask 代码进行测试:

import os
from flask import Flask

app = Flask(__name__)

@app.route("/")
def root():
    env_names = [
        "FLASK_APP",
        "FLASK_ENV",
        "FLASK_DEBUG",
        "EMAIL_USER",
        "EMAIL_PASS",
    ]
    for env_name in env_names:
        print(os.environ.get(env_name))
    return "It works!"

...显示环境变量已正确读取并且调试模式现在为 "on".

的主要缺点是跨 IDE、与您团队的其他成员或与您的 CI/CD 管道共享这些环境变量。您必须单独定义它们。

优点是允许您使用常见的调试器功能,例如代码断点(如上面的屏幕截图所示,在 print 语句处停止执行),以及查看变量的值当您的代码运行时。