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
语句处停止执行),以及查看变量的值当您的代码运行时。
下面显示的是我的 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"
.
此
优点是允许您使用常见的调试器功能,例如代码断点(如上面的屏幕截图所示,在 print
语句处停止执行),以及查看变量的值当您的代码运行时。