部署带自定义应用的Django项目到Heroku报无效可编辑依赖错误
问题原因
你在requirements.txt中配置的/path/to/django-apps/xxx是本地开发环境的绝对路径,Heroku部署时的构建容器是独立隔离的环境,不存在你本地的目录结构,pip无法在对应路径找到可安装的项目,因此抛出无效可编辑依赖的错误。
修复方案
按适配场景选择以下任意一种方案即可:
方案1:同仓库相对路径引入(最推荐,适合自定义应用随主项目共同迭代的场景)
- 将所有自定义Django应用目录迁移到主项目Git仓库内,比如放在和
manage.py同级的django-apps/目录下 - 将requirements.txt中原有的绝对路径替换为相对路径(路径相对于requirements.txt文件的所在位置):
-e ./django-apps/moderation/django-moderation -e ./django-apps/social/django-social -e ./django-apps/user/django-userprofile -e ./django-apps/event/django-events -e ./django-apps/contactus/django-contactus
- 确认这些应用目录没有被
.gitignore排除,执行git add .提交所有变更后重新推送即可。Heroku构建时会在自身文件系统内通过相对路径找到对应项目,完成pip安装。 - 本地可以提前执行
git ls-files | grep django-apps校验这些应用文件是否已经被Git跟踪,避免漏提交。
方案2:VCS地址引入(适合自定义应用独立维护、多项目复用的场景)
- 将每个自定义应用推送到独立的Git代码仓库(私有仓库需要提前配置Heroku的仓库访问权限)
- 将requirements.txt中的本地路径替换为符合pip规范的Git VCS地址:
-e git+https://你的代码仓库地址/django-moderation.git#egg=django-moderation -e git+https://你的代码仓库地址/django-social.git#egg=django-social -e git+https://你的代码仓库地址/django-userprofile.git#egg=django-userprofile -e git+https://你的代码仓库地址/django-events.git#egg=django-events -e git+https://你的代码仓库地址/django-contactus.git#egg=django-contactus
- 提交变更后重新推送,Heroku构建时会自动从对应Git地址拉取依赖完成安装。
方案3:项目内直接引用(适合快速测试部署场景)
直接把自定义应用的代码放到主项目的模块目录下(比如根目录的apps/文件夹),不使用pip editable模式安装,只要在settings.py的INSTALLED_APPS中配置正确的导入路径即可,这种方式不需要在requirements.txt中添加这些应用的依赖项,跳过pip安装步骤。
注意事项
- 所有提交到部署仓库的路径配置不要使用本地绝对路径,优先使用相对路径或所有部署环境均可公开/授权访问的资源地址。
- 部署前可以本地在全新的虚拟环境中,拉取对应Git分支的代码执行
pip install -r requirements.txt,如果本地全新环境能安装成功,Heroku端基本不会出现路径类依赖错误。
内容的提问来源于stack exchange,提问作者Homunculus Reticulli
相关产品推荐
相关产品推荐

