Heroku部署Python应用推送被拒编译失败,该如何解决?
错误产生原因
该问题不是单纯Python层面的问题,核心诱因是运行环境差异,具体如下:
pywin32是Windows平台专属的Python库,仅提供Windows系统适配的安装包,没有适配Linux/macOS环境的发行版本- Heroku的容器运行环境是Linux系统,无法找到对应平台的
pywin32安装包,因此抛出找不到匹配分发版本的报错 - 附加问题说明:
- 你贴出的requirements.txt里标注的是
pywin32==301,但日志报错是找不到pywin32==300,说明你提交到Heroku的requirements.txt版本和你本地当前的版本不一致,提交前需要确认内容同步 - requirements.txt还存在两个额外错误:
gunicorn==20.1.0o版本号多写了字母o,setuptools==0.7.3版本过于老旧,会导致现代依赖包安装失败 - 同时存在的
pypiwin32也是Windows平台专属依赖,同样无法在Heroku环境安装
- 你贴出的requirements.txt里标注的是
可行解决方案
- 移除或限定Windows专属依赖的安装环境
- 如果业务代码在服务端运行时不需要用到
pywin32、pypiwin32的相关能力,直接删除requirements.txt中的以下两行:pypiwin32==223 pywin32==301 - 如果本地Windows开发环境需要用到这两个依赖,可通过平台标记限定仅Windows环境安装,修改写法如下:
pywin32==301; platform_system == "Windows" pypiwin32==223; platform_system == "Windows"
- 如果业务代码在服务端运行时不需要用到
- 修正错误的依赖配置
- 将
gunicorn==20.1.0o修改为gunicorn==20.1.0 - 将
setuptools==0.7.3升级为setuptools>=60.0.0
- 将
- 冗余依赖清理(可选,根据业务实际情况选择)
Heroku是无图形界面的服务端运行环境,如果你部署的是Django服务端应用,不需要GUI相关能力,可删除Kivy、kivy-deps.angle、kivy-deps.glew、kivy-deps.sdl2、Kivy-Garden这些GUI类依赖,避免后续出现其他环境兼容问题
内容的提问来源于stack exchange,提问作者Ashwin Behera
相关产品推荐
相关产品推荐

