Django无法从.env文件导入DATABASE_PASSWD值的问题
问题排查与解决方案
你的问题是.env文件中DATABASE_PASSWD变量无法通过decouple.config()读取,但其他变量正常,硬编码密码可正常运行。以下是针对性的排查和解决步骤:
1. 确认.env文件的位置与命名
- 确保
.env文件与manage.py处于同一项目根目录,不要放置在子应用或其他目录下,python-decouple默认从项目根目录加载该文件。 - 文件名必须是
.env,不能是env、.env.dev这类变体(除非你显式指定加载路径)。
2. 检查DATABASE_PASSWD的行格式
- 确保变量定义无多余空格:正确格式为
DATABASE_PASSWD=Password1,不要写成DATABASE_PASSWD = Password1(等号两侧空格会导致解析失败)。 - 不要给密码加引号(单/双引号),比如
DATABASE_PASSWD="Password1"可能会被解析成包含引号的字符串,甚至直接读取失败。
3. 显式指定.env文件路径
如果默认加载路径有问题,可以手动指定文件路径强制加载:
# settings.py from decouple import Config, RepositoryEnv # 替换为你的.env文件绝对路径 config = Config(RepositoryEnv('/your/project/root/.env')) DB_PASSWORD = config('DATABASE_PASSWD') SECRET_KEY = config('SECRET_KEY')
4. 排查系统环境变量冲突
系统环境变量优先级高于.env文件中的变量,可能存在同名的DATABASE_PASSWD变量但未设置值。可以先在settings.py中打印验证:
import os # 打印该环境变量的实际值 print(os.environ.get('DATABASE_PASSWD'))
如果输出None,说明.env文件未被正确加载;如果输出非预期值,说明系统环境变量覆盖了.env中的配置,需要删除或修改系统变量。
5. 清理运行环境缓存
- 重启你的IDE(如PyCharm、VS Code),避免环境变量缓存导致的读取异常。
- 如果用终端运行Django,重启终端后再执行
python manage.py runserver,确保环境变量重新加载。
6. 检查是否存在多.env文件冲突
如果项目中存在多个环境配置文件(如.env、.env.production),可能python-decouple加载了错误的文件。可以通过环境变量指定加载目标文件:
# Linux/macOS终端 export ENV_PATH=/your/project/root/.env # Windows cmd set ENV_PATH=C:\your\project\root\.env
之后再启动Django服务。
内容的提问来源于stack exchange,提问作者Wincij
相关产品推荐
相关产品推荐

