You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目中python-decouple无法正常使用的问题求助

解决python-decouple读取环境变量的编码与读取失败问题

问题根源

你的.env或settings.ini文件是以UTF-16带BOM编码保存的,而python-decouple默认使用UTF-8读取,导致解码错误;强行修改编码后,因编码不匹配读取内容乱码,进而找不到SECRET_KEY。

具体解决步骤

  1. 重新保存.env为UTF-8无BOM编码

    • 用记事本打开.env文件,点击「文件」→「另存为」,在编码下拉框选择「UTF-8」(注意不要选「UTF-8 BOM」),覆盖原文件。
    • 确保文件内容仅包含:
      SECRET_KEY=ARANDOMSECRETKEY
      
      无多余空行、空格或特殊字符。
  2. 恢复settings.py的默认编码配置

    • 删除config.encoding = locale.getpreferredencoding(False)这行自定义编码设置。
    • 保留核心读取代码:
      from decouple import config
      SECRET_KEY = config('SECRET_KEY')
      
  3. 验证.env文件路径正确性

    • 确认.env放在Django项目的BASE_DIR目录下(即与manage.py同层级的目录)。
    • 可在settings.py中临时添加代码验证路径:
      import os
      print("Env file path:", os.path.join(BASE_DIR, '.env'))
      
      启动项目时查看输出路径是否与实际文件位置一致。
  4. 清理无关文件与环境缓存

    • 删除之前创建的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:51:18