部署Django应用到Render时使用Poetry遇到的依赖问题
解决Django部署Render时的两个问题
一、ModuleNotFoundError: No module named 'dj_database_url'
问题根源是当前运行python manage.py runserver的Python环境,和Poetry安装依赖的虚拟环境不一致。按以下步骤解决:
- 直接通过Poetry指定环境运行命令:
poetry run python manage.py runserver - 或者先激活Poetry创建的虚拟环境,再执行启动命令:
poetry shell python manage.py runserver - 验证环境是否匹配:运行
poetry run which python(Mac/Linux)或poetry run where python(Windows),输出路径应指向Poetry虚拟环境下的Python,而非系统默认路径。如果之前手动激活过其他虚拟环境(如venv、conda),先退出再操作。
二、环境变量(如SECRET_KEY)的存储与读取
结合你的使用习惯和Render部署逻辑,按以下方式处理:
本地开发阶段
- 继续用
.env文件存储敏感变量,示例内容:SECRET_KEY=your-custom-secret-key DATABASE_URL=postgres://username:password@localhost:5432/your-db-name - 在
settings.py中保留你熟悉的environs读取逻辑:from environs import Env env = Env() env.read_env() SECRET_KEY = env("SECRET_KEY") # 结合dj_database_url配置数据库 import dj_database_url DATABASES = { "default": dj_database_url.config(default=env("DATABASE_URL")) } - 将
.env文件加入.gitignore,避免敏感信息提交到代码仓库。
Render部署阶段
- 无需上传
.env文件,在Render服务后台操作:- 进入你的Django服务详情页
- 点击「Environment」标签
- 在「Environment Variables」区域添加变量,比如
SECRET_KEY,以及Render部署PostgreSQL后自动生成的DATABASE_URL
- Render会在运行时自动将这些变量注入到环境中,environs和dj_database_url会正常读取,无需修改代码。
内容的提问来源于stack exchange,提问作者blueberry.py
相关产品推荐
相关产品推荐

