Setup.py 重新安装已经安装的用户编写的包

Vla*_*lad 5 python git pip setuptools setup.py

我正在开发两个 python 包,pkg_apkg_b. pkg_a是 的要求pkg_b,所以setup.pyforpkg_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,
)

Run Code Online (Sandbox Code Playgroud)

由于我正在同时开发这两个软件包,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
Run Code Online (Sandbox Code Playgroud)

我猜这与版本控制有关,但我不知道如何解决这个问题。有小费吗?

sin*_*roc 2

这就是 VCS 依赖关系的处理方式。您应该指定一个固定引用(标签、提交 ID):

'pkg_a @ git+ssh://git@bitbucket.org/vlad/pkg_a.git@da39a3ee5e6b4b0d3255bfef95601890afd80709'
Run Code Online (Sandbox Code Playgroud)

请参阅: https: //pip.pypa.io/en/stable/reference/pip_install/#git

如果您没有指定固定引用(非移动标签或提交 ID),则 pip 每次都必须克隆,因为自上次安装以来存储库的内容可能已更改。

(说实话,即使在进行此更改之后, pip可能仍然会在每次安装时重新克隆,我不记得具体的行为了。)

看到类似的问题:pip安装升级无法升级私有依赖项