Django部署至Heroku时已卸载的PyGObject仍被加载导致构建失败如何解决
解决方案
1. 清理Heroku构建缓存
Heroku默认会保留之前构建的依赖缓存,即使你更新了requirements.txt也可能复用旧的依赖链,先执行以下命令清理缓存后重新部署:
heroku plugins:install heroku-builds heroku builds:cache:purge -a 替换为你的Heroku应用名称
清理完成后重新推送代码到Heroku触发构建。
2. 定位并移除触发依赖的上游包
PyGObject不是你直接导入的依赖,是你requirements清单中某个包的间接可选依赖,且仅在Heroku的Linux容器环境下会被触发安装,本地不会复现。
你可以在本地执行以下命令查看依赖树定位上游包:
pip3 install pipdeptree pipdeptree --reverse --packages PyGObject
从你给出的依赖清单看,两个高概率触发的包:
pycairo==1.20.1:Linux环境下安装时会自动拉取PyGObject作为可选依赖,如果你项目没有用到cairo相关功能,可以直接从requirements.txt中移除该包cm-rgb==0.3.6:硬件RGB控制库,本身依赖pycairo,如果没有用到对应功能也可以直接移除
3. 强制忽略PyGObject安装的临时方案
如果你确实需要用到触发依赖的上游包,可以直接在requirements.txt末尾添加如下规则,强制pip跳过PyGObject的安装:
PyGObject==0.0.0; python_version >= '0'
该规则会让pip判定已经满足PyGObject的版本要求,不会触发下载安装流程。
4. 额外检查项
- 确认你生成requirements.txt时是在项目专属的虚拟环境下执行的,不要使用全局环境的pip freeze,避免带入全局无关依赖
- 检查项目根目录是否存在
Pipfile、Pipfile.lock等其他包管理文件,Heroku会优先使用这类文件而非requirements.txt,如果你不用这些文件可以直接删除,避免干扰依赖解析。
内容的提问来源于stack exchange,提问作者deitz88
相关产品推荐
相关产品推荐

