部署Django项目至Heroku Git时出现pip安装错误
从你贴的部署日志来看,问题出在执行pipenv-to-pip脚本时崩溃了——这个脚本主要负责把Pipfile/Pipfile.lock转换成平台能识别的requirements格式,常见于Heroku这类PaaS平台的部署流程里。结合你用的Python3.6.4(这个版本已经停止维护很久了),大概率是版本兼容或者依赖配置的问题,给你几个亲测有效的解决思路:
先修复Pipfile相关文件
有时候Pipfile或者Pipfile.lock会因为本地操作失误出现损坏,导致转换脚本读取失败。你可以在本地项目目录里执行pipenv lock重新生成锁文件,过程中如果有报错,跟着提示修复依赖声明(比如移除不存在的包、修正版本号),确保生成的文件没有问题后再推送代码部署。升级本地pipenv版本
旧版pipenv生成的配置文件可能和部署平台的转换脚本不兼容。本地执行pip install --upgrade pipenv把pipenv更到最新版,然后重新生成Pipfile.lock,再部署试试。直接改用requirements.txt部署
如果绕不开pipenv的坑,干脆直接用标准的requirements文件:在本地执行pipenv run pip freeze > requirements.txt,生成完整的依赖列表。然后在项目根目录新建runtime.txt,里面写上兼容的Python版本(比如python-3.8.17,尽量选平台支持的、仍在维护的版本),这样部署平台会跳过pipenv转换步骤,直接读取requirements.txt安装依赖,能避免很多兼容性问题。检查buildpack配置
如果你用的是Heroku这类平台,确保用的是官方的Python buildpack。可以执行heroku buildpacks:set heroku/python(针对Heroku)重置buildpack,然后重新部署。
另外提一句:Python3.6已经在2021年底停止安全更新了,建议你尽快把项目的Python版本升级到3.8及以上,既能解决这类老版本带来的兼容问题,还能拿到安全补丁和性能提升。
内容的提问来源于stack exchange,提问作者Frank Gilmor

