Heroku部署pip安装依赖失败:requirements.txt中@格式依赖报错
@符号的作用
@是pip 19.0版本后官方支持的依赖源指定语法,格式为包名 @ 安装源地址,安装源可以是本地文件路径、Git仓库地址、远程依赖包链接等。
你场景中出现的本地路径格式,是因为你本地的cffi包不是直接从PyPI公共源安装的,大概率是通过本地编译缓存、或者本地目录直接安装的,pip freeze执行时会直接记录当前包的实际安装源,而这个本地路径只存在于你的开发设备上,Heroku服务器不存在对应路径,因此触发报错。
部署失败的解决方法
- 首先删除requirements.txt中所有包含
@ file://格式的依赖条目,这类条目都是你的开发环境专属的本地路径,无法在其他服务器上生效 - 查看本地virtualenv环境中对应包的实际版本:执行
pip list找到cffi的版本号,将对应依赖行改为标准版本约束格式,比如cffi==1.15.0(替换为你实际查到的本地版本即可) - 也可以直接执行命令一键生成合规的依赖列表:
pip freeze --all | grep -v "@ file://" > requirements.txt,该命令会自动过滤所有带本地路径的条目,输出带标准版本号的依赖清单 - 确认修改后的requirements.txt没有本地路径条目后,重新提交到Git仓库,再推送到Heroku即可正常完成依赖安装
- 后续开发时尽量避免从本地目录直接安装依赖,优先使用
pip install 包名从PyPI源安装,可避免pip freeze生成本地路径格式的依赖条目
内容的提问来源于stack exchange,提问作者Kouichi C. Nakamura
相关产品推荐
相关产品推荐

