Django项目中python-decouple无法正常使用的问题求助
解决python-decouple读取环境变量的编码与读取失败问题
问题根源
你的.env或settings.ini文件是以UTF-16带BOM编码保存的,而python-decouple默认使用UTF-8读取,导致解码错误;强行修改编码后,因编码不匹配读取内容乱码,进而找不到SECRET_KEY。
具体解决步骤
重新保存.env为UTF-8无BOM编码
- 用记事本打开
.env文件,点击「文件」→「另存为」,在编码下拉框选择「UTF-8」(注意不要选「UTF-8 BOM」),覆盖原文件。 - 确保文件内容仅包含:
无多余空行、空格或特殊字符。SECRET_KEY=ARANDOMSECRETKEY
- 用记事本打开
恢复settings.py的默认编码配置
- 删除
config.encoding = locale.getpreferredencoding(False)这行自定义编码设置。 - 保留核心读取代码:
from decouple import config SECRET_KEY = config('SECRET_KEY')
- 删除
验证.env文件路径正确性
- 确认
.env放在Django项目的BASE_DIR目录下(即与manage.py同层级的目录)。 - 可在settings.py中临时添加代码验证路径:
启动项目时查看输出路径是否与实际文件位置一致。import os print("Env file path:", os.path.join(BASE_DIR, '.env'))
- 确认
清理无关文件与环境缓存
- 删除之前创建的
settings.ini、settings.old等文件,避免python-decouple误读。 - 重启终端或IDE,确保环境变量无残留干扰。
- 删除之前创建的
错误原因解释
UnicodeDecodeError中的0xff是UTF-16编码的BOM标记,python-decouple默认UTF-8解码无法识别。- 自定义
config.encoding为系统默认编码后,与文件实际编码不匹配,读取内容变为乱码,因此触发UndefinedValueError。 settings.ini的报错内容ÿþ[\x00s\x00e\x00t\x00t\x00i\x00n\x00g\x00s\x00]\x00是UTF-16编码的字节序列,导致configparser无法识别section头。
内容的提问来源于stack exchange,提问作者daan
相关产品推荐
相关产品推荐

