【问题标题】:Setup.py reinstalling already installed user-written packageSetup.py 重新安装已经安装的用户编写的包
【发布时间】:2021-05-14 07:42:48
【问题描述】:

我正在开发两个 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

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

【问题讨论】:

    标签: python git pip setuptools setup.py


    【解决方案1】:

    这就是处理 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

    【讨论】:

    • 此外,可编辑的安装将更“轻松”地被替换。具体内容我记不太清了,但我怀疑如果你正常安装pkg_a,那么可能不会每次都重新安装。
    • Sinoroc 的回答是正确的,你应该接受它。 :)
    猜你喜欢
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2013-11-01
    相关资源
    最近更新 更多