.env环境变量在Python中读取结果不一致问题咨询
问题原因与解决方案
核心原因
这种读取结果不一致的情况,是python-dotenv库的转义字符解析机制导致的:
- 默认情况下,
load_dotenv()会开启转义解析,把.env配置里的特殊字符(比如冒号:)转成对应的URL编码格式\x3a。 - 刚新增变量时直接读取,可能因为.env文件没被完全重新加载(比如缓存残留),转义规则没生效;重启虚拟环境后,环境变量被彻底重新加载,转义就触发了,所以结果变成转义后的样子。
解决办法
方法1:关闭转义解析
调用load_dotenv()时显式关掉转义功能,让它直接读取原始字符串:
import os from dotenv import load_dotenv load_dotenv(escape=False) endpoint = os.getenv("ENDPOINT", "") print(endpoint) # 输出正常的 http://localhost:9000
方法2:修改.env文件写法
去掉配置值的双引号,直接写URL:
ENDPOINT=http://localhost:9000 NEW_ENDPOINT=http://localhost:9001
这样python-dotenv不会触发转义,读取结果就是正常的URL。
方法3:强制重载并关闭转义
如果必须保留双引号,可以强制重载环境变量同时关闭转义:
load_dotenv(override=True, escape=False)
内容的提问来源于stack exchange,提问作者Mr. Kenneth
相关产品推荐
相关产品推荐

