在Python中,我经常使用#%%单元标记来测试使用环境变量的代码。我的解释器是Python虚拟环境。我经常在source $HOME/env/bin/activate中向环境启动脚本添加和删除环境变量,如下所示:
export VAR="value"
要使变量在VS代码交互中工作,我必须使用Developer: Reload Window,这意味着我丢失了Interactive上的所有数据。有没有一种不修改env/bin/activate脚本(需要重新加载)而将环境变量应用于Python实例的方法?
发布于 2022-09-27 01:36:07
您可以阅读有关环境变量的文档。
默认情况下,Python扩展在当前工作区文件夹中查找并加载名为.env的文件,然后应用这些定义。该文件由用户设置中的默认条目"python.envFile": "${workspaceFolder}/.env"标识。您可以随时更改python.envFile设置,以使用不同的定义文件。
示例:
dev.env
MYPROJECT_DBUSER=devadmin
test.py
import os
print(os.getenv('MYPROJECT_DBUSER'))settings.json
"python.envFile": "${workspaceFolder}/dev.env"当我使用交互式窗口运行test.py时,

发布于 2022-09-28 11:40:20
上面的解决方案可以工作,但是如果您更改了.env文件中的环境变量,则仍然需要重新加载窗口。
避免这种情况的一种方法是定义.env文件中的所有环境变量,但这可能会导致许多环境变量。
vs-代码建议设置两个.env文件,一个用于调试,一个用于dev.env,另一个用于prod prod.env。要添加这些内容,在工作区文件夹中您可能会看到一个文件夹.vscode,它可能有两个文件launch.json和settings.json。launch.json用于调试,settings.json用于设置工作区设置。
launch.json实例
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true,
"python.envFile": "${workspaceFolder}/dev.env"
}
]
}在settings.json中
{
"python.envFile": "${workspaceFolder}/prod.env"
}要使launch.json生效,您必须在调试模式下启动会话。
同样,如果更改上述文件中的环境变量,仍然必须重新加载窗口或重新启动内核才能显示新的环境变量,从而导致交互窗口中的数据丢失。如果您希望保留数据,并且仍然希望更改环境变量,则可以通过os.environ[key]=var进行更改。如果您有许多变量要添加/更改,可以如下所示:
# store your environment variables in json (or config.ini) as key value pair
# following assumes you store your environment variable in json file
import os
import json
env_vars = json.load(open('env_file.json', 'r'))
for key, value in env_vars.items():
os.environ[key]=valuehttps://stackoverflow.com/questions/73858371
复制相似问题