pip升级依赖SSH链接分支的私有包失败问题求助
我来帮你搞定这个头疼的问题——这是pip处理Git依赖时的一个常见行为:当你在install_requires里指定了Git分支(比如master),pip安装后会记录当时拉取的提交哈希,后续执行升级命令时,它只会检查依赖的"标识"(也就是你写的git+ssh://...@master)是否匹配,而不会主动去远程仓库检查这个分支有没有新的提交,所以才会出现"已经满足,跳过升级"的提示,但实际本地版本还是旧的。
下面是几个有效的解决方法:
方法1:强制升级目标依赖
直接针对MyOwnPackage执行升级命令,让pip重新拉取远程分支的最新代码:
pip install --upgrade "MyOwnPackage @ git+ssh://git@github.com/myusename/MyOwnPackage@master"
执行完这个命令后,再运行pip install --upgrade -e .就能确保CurrentPackage使用的是最新的依赖版本了。
方法2:清理pip缓存后重新升级
pip会缓存已下载的依赖包,有时候旧的提交缓存会导致它不重新拉取新内容。先清理缓存:
pip cache purge
然后再执行你的升级命令:
pip install --upgrade -e .
这样pip会重新从远程仓库拉取MyOwnPackage的master分支最新代码。
方法3:结合强制重装参数升级(一次性解决)
如果你想一步到位,也可以直接在升级命令里加上--force-reinstall和--no-deps参数(--no-deps是为了避免不必要地重装其他无关依赖):
pip install --upgrade --force-reinstall --no-deps -e .
这个命令会强制重新安装CurrentPackage及其指定的Git依赖,确保拉取最新的代码。
额外提示:长期优化方案
如果希望后续每次执行升级时,pip都能自动检查Git分支的最新提交,可以考虑在安装时添加--upgrade-strategy eager参数(该参数会让pip主动检查所有依赖的远程更新):
pip install --upgrade --upgrade-strategy eager -e .
不过要注意,这个参数会升级所有依赖,如果你只想针对特定依赖更新,方法1会更精准。
内容的提问来源于stack exchange,提问作者Luk Aron

