Heroku部署Python项目报setup.py egg_info运行失败
问题诱因
这个报错和你升级pip、Heroku平台环境、本地虚拟环境配置都没有关系,根源是pypaystack==1.24本身存在打包设计缺陷:
这个老旧版本的安装脚本setup.py在执行元数据生成步骤时,会直接导入包自身的业务代码,而业务代码顶层就引用了requests库。新版pip安装包的流程是先执行setup.py生成包元数据,再安装该包声明的所有依赖,这就导致解析pypaystack的时候,环境里还没装requests,直接触发ModuleNotFoundError。
你本地运行、甚至新建虚拟环境后装包不报错,是因为你本地装其他依赖时已经提前把requests装到环境里了,pypaystack执行setup.py的时候能找到已经存在的requests,自然不会报错。但Heroku的Python构建流程是严格按顺序逐个解析依赖的元数据,解析到pypaystack的时候requests还没被安装,就会直接构建失败。
修复方法
按推荐优先级排序:
- 最简便的方案:打开项目根目录的
requirements.txt,在文件最顶部单独加一行requests(可以指定你项目兼容的版本,比如requests>=2.25.0),强制Heroku在解析pypaystack之前先把requests安装完成,即可绕过这个打包缺陷。 - 长期稳定方案:替换掉停止维护的
pypaystack==1.24版本,使用后续有维护的兼容分支版本,这类新版本已经修复了setup.py提前导入业务代码的问题,不需要额外提前装依赖。 - 不推荐的临时方案:通过Heroku的环境变量配置pip降级到旧版本,用旧版的依赖解析逻辑绕过元数据检查,这个方案会带来其他依赖兼容性风险,尽量不要用。
内容的提问来源于stack exchange,提问作者Bello Victor
相关产品推荐
相关产品推荐

