pycharm 原生不支持环境变量嵌套引用(如 url=https://${domain}),必须借助 envfile 插件加载 .env 文件并配合 python-dotenv 库(≥0.21.0)实现递归解析,且变量名严格区分大小写。

环境变量中变量值引用不能靠系统原生方式自动展开(比如 URL=https://${DOMAIN} 在 PyCharm 或 shell 命令行里直接写进 Environment Variables 栏,它不会被解析),必须依赖支持嵌套语法的工具或加载机制。
支持 ${VAR} 引用的场景和写法
只有在特定上下文中,${VAR} 或 $VAR 才会被真正替换:
- .env 文件 + python-dotenv 库:这是最常用且可靠的方式。语法支持递归展开,例如:
DOMAIN=example.com
URL=https://${DOMAIN}
API_BASE=${URL}/v1
- 需确保使用
python-dotenv ≥ 0.21.0,并调用load_dotenv(override=True); - 变量名不区分大小写?不,严格区分大小写,
${domain}和${DOMAIN}是不同变量; - 支持单引号、双引号包裹值,但引号本身不参与解析,如
MSG="Hello ${USER}"中${USER}仍会尝试展开。
shell 环境中的变量引用规则
在终端执行时(如 export URL=https://${DOMAIN}),bash/zsh 会做一次展开,但前提是 DOMAIN 已提前定义:
- 先运行
export DOMAIN=github.com,再运行export URL=https://${DOMAIN},此时$URL才是https://github.com; - 如果
DOMAIN未定义,${DOMAIN}展开为空,结果变成https://; - 可写成
URL=https://${DOMAIN:-localhost}提供默认值,避免空值问题。
PyCharm 运行配置中不支持自动展开
直接在 Run → Edit Configurations → Environment variables 里填:
URL=https://${DOMAIN}
PyCharm 会把整个字符串原样传给 Python 进程,os.getenv("URL") 返回的就是字面量 https://${DOMAIN},不是解析后的结果。
- 正确做法:用 EnvFile 插件加载 .env 文件,并勾选 “Load values from .env file before running”;
- 或者在代码里显式调用
load_dotenv(),不依赖 IDE 的环境变量注入; - 避免混用:不要既在 IDE 里手动填变量,又用 .env 加载同名变量,容易覆盖混乱。
常见错误写法与修正
-
错误:
PATH=$PATH:/my/tool/bin写在 .env 里却没用 python-dotenv 加载 → 不生效; -
错误:
DB_URL=postgres://${USER}:${PASSWORD}@${HOST}/mydb中任一变量未定义 → 整个值出错或截断; -
建议:敏感变量(如 PASSWORD)不要出现在 .env 文件明文里,应由运行时注入,再通过
${PASSWORD}引用; -
建议:用
os.getenv("VAR", "default")代替os.environ["VAR"],防止 KeyError。









