os.getenv/os.environ无法读取.env文件变量的问题
问题原因
VSCode的Python调试插件会自动加载项目根目录下的.env文件,把其中的变量注入到环境变量中,所以调试时能正常读取HOST。但直接通过命令行或VSCode普通运行模式执行脚本时,Python本身不会自动读取.env文件,导致os.environ["HOST"]触发KeyError,os.getenv("HOST")返回None。
解决方案
方法一:用python-dotenv自动加载.env文件
这是最通用的方案,不管在哪种运行方式下都能生效:
- 安装依赖包:
pip install python-dotenv - 修改
script.py代码,添加加载.env的逻辑:import os from dotenv import load_dotenv # 加载项目根目录的.env文件 load_dotenv() # 正常获取环境变量 host = os.environ["HOST"] # 或者用os.getenv,不存在时返回None(不会报错) # host = os.getenv("HOST")
方法二:运行脚本前手动设置环境变量
如果不想额外安装依赖,可以在运行脚本时先手动指定环境变量:
- Windows命令行:
set HOST="url_to_host" && python script.py - Linux/macOS终端:
export HOST="url_to_host" && python script.py
方法三:配置VSCode普通运行任务
如果习惯用VSCode的"运行"按钮执行脚本,可以在项目的.vscode目录下创建tasks.json,配置加载.env的任务:
{ "version": "2.0.0", "tasks": [ { "label": "Run Script with Env", "type": "shell", "command": "python script.py", "envFile": "${workspaceFolder}/.env", "group": { "kind": "build", "isDefault": true }, "problemMatcher": [] } ] }
之后在VSCode中按Ctrl+Shift+B就能运行带.env变量的脚本。
内容的提问来源于stack exchange,提问作者An old man in the sea.
相关产品推荐
相关产品推荐

