问题描述
我正在开发两个 python 包,pkg_a
和 pkg_b
。 pkg_a
是 pkg_b
的要求,因此 setup.py
的 pkg_b
如下所示:
from setuptools import setup
inst_reqs = [
'pkg_a @ git+ssh://git@bitbucket.org/vlad/pkg_a.git',]
setup(
name="pkg_b",version="0.0.0",packages=['pkg_b'],install_requires=inst_reqs,)
由于我同时开发这两个软件包,pkg_a
已经以可编辑模式安装 (pip install -e .
)。
pip安装pkg_b
时,为什么删除了现有的pkg_a
安装?看起来 pip 会系统地锥化指定的 repo,卸载现有的 pkg_a
并从克隆的 repo 中重新安装它:
Successfully built pkg_a
Installing collected packages: pkg_a,pkg_b
Attempting uninstall: pkg_a
Found existing installation: pkg_a 0.0.0
Uninstalling pkg_a-0.0.0:
Successfully uninstalled pkg_a-0.0.0
Running setup.py develop for pkg_b
Successfully installed pkg_a-0.0.0 pkg_b
我猜这与版本控制有关,但我不知道如何解决这个问题。有什么提示吗?
解决方法
这就是处理 VCS 依赖项的方式。你应该指定一个固定的引用(标签,提交 ID):
'pkg_a @ git+ssh://git@bitbucket.org/vlad/pkg_a.git@da39a3ee5e6b4b0d3255bfef95601890afd80709'
见:https://pip.pypa.io/en/stable/reference/pip_install/#git
如果您没有指定固定的引用(非移动标签或提交 ID),那么 pip 必须每次都进行克隆,因为自上次安装以来存储库的内容可能已更改。
(老实说,即使在此更改之后,pip 仍可能会在每次安装时重新克隆,我不记得确切的行为了.)
查看类似问题:pip install upgrade fail to upgrade private dependency