使用Docker-Compose启动Django项目时出现dotenv模块属性错误
解决Docker启动时
dotenv无dotenv_values属性的问题 排查依赖版本冲突
dotenv_values是python-dotenv0.10.0及以上版本才新增的方法,容器内大概率安装了低于该版本的旧版,和本地环境版本不一致。- 本地执行
pip show python-dotenv查看有效版本,然后在依赖文件中明确指定版本:- requirements.txt添加:
python-dotenv>=0.19.0 - Poetry的pyproject.toml中配置:
python-dotenv = "^0.19.0"
- requirements.txt添加:
清理重名的dotenv包
- 存在一个旧第三方包也叫
dotenv,和python-dotenv重名,会导致容器内导入错误模块。 - 检查依赖文件,删除单独的
dotenv包条目,只保留python-dotenv。 - 可在Dockerfile中强制清理并重新安装:
RUN pip uninstall -y dotenv && pip install python-dotenv>=0.19.0
改用Django-environ原生API读取配置
- 无需手动导入
dotenv模块,django-environ本身依赖python-dotenv,用原生写法避免模块调用冲突:import environ env = environ.Env() # 读取.env文件,可指定路径,默认读取当前目录下的.env env.read_env(env.str('ENV_PATH', '.env'))
验证Docker依赖安装流程
- 确保Dockerfile中依赖安装步骤正确加载最新依赖文件:
确认requirements.txt包含正确的COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txtpython-dotenv版本,无冲突包。
检查.env文件容器内路径
- 虽然错误由模块属性引发,但仍需确认容器内.env文件路径与代码指定一致:
- 在docker-compose.yml中挂载本地.env到容器对应路径:
services: web: volumes: - ./.env:/app/.env - 或在Dockerfile中COPY.env文件到容器内目标位置。
- 在docker-compose.yml中挂载本地.env到容器对应路径:
内容的提问来源于stack exchange,提问作者Alexey Razmanov
相关产品推荐
相关产品推荐

