在 VS Code 上运行 Flask 应用程序时无法识别 launch.json 中的环境变量
Posted
技术标签:
【中文标题】在 VS Code 上运行 Flask 应用程序时无法识别 launch.json 中的环境变量【英文标题】:Environment variables in launch.json not recognized when running Flask application on VS Code 【发布时间】:2021-12-10 11:53:33 【问题描述】:下面显示的是我的 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
【问题讨论】:
有多个可能的冲突大纲,例如有一个.env
文件,在this SO post 中进行了概述
您实际上在运行through the debugger 应用程序吗?似乎您没有这样做,因为您提到使用“run.py 脚本”并且您正在从 python 控制台显示>>>
。 launch.json 配置仅在通过调试器(读取launch.json 文件)运行应用程序时生效。
我没有通过调试器运行应用程序。当我这样做时,它会识别环境变量。
【参考方案1】:
launch.json 文件仅在通过 VS Code 的调试器运行您的应用时使用。
见https://code.visualstudio.com/docs/python/debugging#_initialize-configurations:
初始化配置
在调试会话期间,配置驱动 VS Code 的行为。 配置在
launch.json
文件中定义,该文件存储在.vscode
工作区中的文件夹。
既然你提到了
...我从 run.py 脚本运行我的烧瓶应用程序,...
您正在使用 Python shell 进行测试
>>> import os >>> print(os.environ.get('FLASK_DEBUG')) None
意味着您永远不会使用 VS Code 的调试器,因此永远不会加载/读取这些环境变量。
我建议阅读 VS Code 的 tutorial on Python Debugging,尤其是 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,
,
]
然后只需从调试器下拉列表中选择该配置:
使用一些快速入门 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"
。
compared to the other answer using a .flaskenv
file 的主要缺点是跨 IDE、与团队的其他成员或与 CI/CD 管道共享这些环境变量。您必须单独定义它们。
优势在于允许您使用常见的调试器功能,例如代码断点(从上面的屏幕截图中可以看出,在print
语句上停止执行),并在代码运行时查看变量的值.
【讨论】:
【参考方案2】:在flask 中管理环境变量的一个好方法是使用.flaskenv
文件。您需要python-dotenv
才能使用它,并且该文件需要位于项目的根目录中。
在您的 .flaskenv
文件中,只需像这样输入变量:
FLASK_APP=run.py
FLASK_ENV=development
FLASK_DEBUG=1
然后您可以使用 flask run
运行烧瓶,然后将加载环境。
这样做意味着如果您在不同的机器上更改或加载项目,您可以跨 IDE 保留环境设置。
查看这里了解更多信息 - Flask environment variables being ignored (FLASK_ENV and FLASK_APP) WINDOWS 10
【讨论】:
以上是关于在 VS Code 上运行 Flask 应用程序时无法识别 launch.json 中的环境变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MacOS Monterey 上修复 VS COde“致命错误:运行时:bsdthread_register 错误”
Configuration.GetConnectionString 在 VS Code 上运行 asp.net 核心时返回 null 但在 Visual Studio 上很好
在 VS Code 中在 Android 手机上运行 Flutter 应用