【问题标题】:PIP UPGRADE - Trouble with versions in personal setup packagePIP 升级 - 个人安装包中的版本有问题
【发布时间】:2019-09-06 21:35:46
【问题描述】:

我正在开发我的第一个 python 包,所以我对这一切都很陌生。

我有自己的安装包,我通过pip install git+<URL>.git 安装。

当我尝试使用--upgrade 标志升级它时,它总是会重新安装,即使我没有更改我的setup.py 文件中的版本。

有人知道为什么会这样吗? o 也许有更好的方法来解决这个问题?

在提问之前我已经进行了研究,但我认为这是一个非常具体的问题。

我已经尝试过 venv 并退出。

python 3.7、pip 19.2、setuptools 40.8

# setup.py

from test import __version__
from setuptools import find_packages, setup

setup(
    name="test",
    version=__version__,
    packages=find_packages(),
)

我希望得到类似的东西:

Requirement already up-to-date: test in ./<cwd>/.venv/lib/python3.7/site-packages (0.0.1)

但是我得到了这个:

Installing collected packages: test
  Found existing installation: test 0.0.1
    Uninstalling test-0.0.1:
      Successfully uninstalled test-0.0.1
  Running setup.py install for test ... done
Successfully installed test-0.0.1

【问题讨论】:

  • 尝试强制升级策略添加--upgrade-strategy only-if-needed标志安装命令。帮助说默认情况下应该是这种方式,但似乎恰恰相反
  • 谢谢,@papercut,我做到了,机器人得到了同样的结果:pip install --upgrade-strategy only-if-needed git+<URL> Requirement already satisfied: Click==7.0 in ./.venv/lib/python3.7/site-packages (from test==0.0.1) (7.0) Installing collected packages: test Found existing installation: test 0.0.1 Uninstalling test-0.0.1: Successfully uninstalled test-0.0.1 Running setup.py install for test ... done Successfully installed test-0.0.1

标签: python-3.x pip setuptools


【解决方案1】:

阅读documentation 对我来说似乎是预期的行为。

请注意,如果已经安装了令人满意的软件包版本,VCS 源将不会在没有 --upgrade 标志的情况下覆盖它。

在这里阅读一些相关的讨论: https://github.com/pypa/pip/issues/2837

看起来pip 在涉及VCS 时会以更加二进制的方式进行升级。它似乎总是在设置--upgrade 时升级,而在未设置时永远不会升级。

您可以尝试本讨论中建议的解决方法,但请注意其副作用(例如,您将在文件系统上拥有 git 存储库的完整克隆):

pip install --editable --upgrade git://somewhere/something.git

【讨论】:

  • 谢谢@sinoroc,但问题是如果我使用pip install --upgrade,即使版本没有更改,该软件包也会被卸载并重新安装。但如果我使用另一个包(即 pip),我会收到 Requirement already up-to-date 消息
  • 是的。正如文档所说,这就是直接从 VCS 安装时 pip 的工作方式。您可以尝试建议的解决方法及其副作用:--editable。下一步是为pip 提交功能请求。
  • 我再次阅读了您的问题和评论,我意识到您的问题确实与文档和 GitHub 讨论中提到的略有不同。当涉及 VCS 时,看起来pip 会以更加二进制的方式进行升级。它似乎总是在设置--upgrade 时升级,而不是在没有设置时。我会试试--editable。您是否尝试过指定 git commit hash
  • 当我实际上正在编辑我的代码时,我曾尝试使用--editable,但我认为安装应该保持在包的标准行为中。我不想在分发中使用此解决方法
  • 我不想在分发中使用此解决方法。同意。 我认为安装应该保持包的标准行为。这个问题可以在pip 错误跟踪器上提出。但我认为这是一个已经做出的技术选择,pip 开发人员必须采取妥协,以允许从 VCS 存储库安装,作为开发阶段的商品,而不是作为分发包的持久解决方案.
猜你喜欢
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多