Git Push Heroku Master失败:无法找到指定版本的mkl-service与mkl-random依赖包求助
解决Heroku部署Python项目的依赖版本匹配问题
嘿,我碰到过类似的情况——Heroku的构建环境和本地虚拟环境的依赖源有时候会有差异,导致本地能用的旧版本包在Heroku上找不到。你的问题很明确:PyPI上已经没有mkl-service==2.3.0和mkl-random==1.2.1的公开版本了,而Heroku只能从PyPI拉取包,所以才会报错。下面给你几个靠谱的解决办法:
1. 直接升级到Heroku可用的版本
从错误信息看,Heroku那边能找到mkl-service==2.4.0,那咱们先修改requirements.txt:
- 把
mkl-service==2.3.0替换成mkl-service==2.4.0 - 对于
mkl-random==1.2.1,你可以本地先升级试试:
然后用pip install --upgrade mkl-randompip freeze | grep mkl-random拿到最新的可用版本号,再更新到requirements.txt里。
改完之后,先在本地虚拟环境验证没问题:
pip install -r requirements.txt
确认项目能正常运行后,提交修改再推送:
git add requirements.txt git commit -m "Update mkl dependencies to fix Heroku deployment" git push heroku master
2. 用宽松的版本约束避免锁定
如果你的项目不需要严格依赖某个旧版本,不如把版本号改成范围,让pip自动选合适的版本:
- 把
mkl-service==2.3.0改成mkl-service>=2.3.0 mkl-random==1.2.1改成mkl-random>=1.2.1
这样Heroku构建时会自动拉取当前PyPI上可用的最新兼容版本,不会因为版本锁定卡壳。
3. 排查依赖的安装来源
有时候本地的包可能是从私有源或者本地文件安装的,不是PyPI上的公开版本。你可以本地执行:
pip show mkl-service
看一下Location和Home-page字段,如果不是PyPI的地址,那Heroku肯定拉不到。这种情况优先用前两种方案升级到公开可用版本。
小提醒
别直接用pip freeze生成完整的requirements.txt,本地虚拟环境里可能会带很多系统特定的依赖(比如和你的本地硬件相关的mkl包版本),最好手动维护这个文件,只列项目必需的依赖和合理的版本范围,这样部署到Heroku这类公共环境时更不容易出问题。
内容的提问来源于stack exchange,提问作者Debasis Sil
相关产品推荐
相关产品推荐

