Setup.py 重新安装已安装的用户编写的包
Setup.py reinstalling already installed user-written package
我正在开发两个 python 包,pkg_a
和 pkg_b
。 pkg_a
是 pkg_b
的要求,因此 pkg_b
的 setup.py
看起来像这样:
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
我正在开发两个 python 包,pkg_a
和 pkg_b
。 pkg_a
是 pkg_b
的要求,因此 pkg_b
的 setup.py
看起来像这样:
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