通过setup.py安装git指定标签Python包不升级问题及配置咨询
问题根因分析
直接pip安装Git URL和读取setup.py依赖的行为逻辑存在差异:
- 直接给pip传递Git URL时,pip会主动克隆仓库读取包版本,和本地已安装版本对比,版本更新就会执行升级
- 你之前的setup.py依赖写法不符合PEP 508规范,版本号直接拼接在URL片段末尾,pip无法识别为版本约束,只会检查本地是否存在
foo包,只要存在就认为满足依赖,不会拉取仓库校验版本
固定版本安装解决方案
按照PEP 508规范调整install_requires的写法,把版本约束放在包名和依赖URL之间:
setup( name='bar', install_requires=[ 'foo==0.3.2 @ git+ssh://git@github.com/fergusmac/foo.git@v0.3.2#subdirectory=somedir' ] )
调整后如果安装时仍未触发升级,可加上升级策略参数执行安装:
pip install . -U --upgrade-strategy eager
该参数会强制pip校验所有依赖的版本是否符合约束,不符合就执行升级。
动态安装master分支最新版本解决方案
首先修改依赖声明,把URL中的固定标签改为master分支,版本约束改为最低版本匹配:
setup( name='bar', install_requires=[ 'foo>=0.0.0 @ git+ssh://git@github.com/fergusmac/foo.git@master#subdirectory=somedir' ] )
注意:你需要保证foo包master分支的
setup.py中版本号每次迭代都会正确递增,否则pip无法判断版本高低。
安装时同样使用带升级策略的命令即可,pip会自动拉取master分支的最新代码,读取版本号和本地版本对比,版本更高就执行升级:
pip install . -U --upgrade-strategy eager
内容的提问来源于stack exchange,提问作者Fergusmac
相关产品推荐
相关产品推荐

