python-dotenv无法完整读取环境变量问题求助
解决python-dotenv读取环境变量截断的问题
问题根源
你的.env文件用双引号包裹了DB_HOST的值,同时值里包含&符号,python-dotenv解析时会把&当作命令分隔符,导致值被截断到retryWrites;另外首次重装后环境变量无残留,能正常读取,后续因为环境变量已经被设置为截断后的值,而默认load_dotenv()不会覆盖已存在的环境变量,所以重复出现截断问题。
解决方案
1. 修正.env文件格式
去掉DB_HOST值的双引号,或者改用单引号包裹,确保&被当作值的一部分:
- 方案一(推荐):去掉引号
DB_HOST=mongodb+srv://xxx:xxx@playground.xxx.mongodb.net/?retryWrites=true&w=majority
- 方案二:用单引号包裹值
DB_HOST='mongodb+srv://xxx:xxx@playground.xxx.mongodb.net/?retryWrites=true&w=majority'
2. 强制覆盖已存在的环境变量
修改test.py中的load_dotenv()调用,添加override=True参数,确保每次运行都从.env文件重新加载并覆盖已有的环境变量:
import os from dotenv import load_dotenv # 强制覆盖已存在的环境变量 load_dotenv(override=True) print(os.environ.get('DB_HOST'))
3. 清理终端环境变量缓存
如果在同一个终端窗口多次运行,之前的截断值可能已经存入环境变量,可手动清除:
- Linux/macOS终端:
unset DB_HOST
- Windows命令提示符:
set DB_HOST=
内容的提问来源于stack exchange,提问作者Muhammad Hakim
相关产品推荐
相关产品推荐

