【问题标题】:Allow "pip install" to ignore local versions允许“pip install”忽略本地版本
【发布时间】:2019-01-07 02:29:52
【问题描述】:

我正在使用versioneer 来管理版本,比如PEP 440

我已将几个版本上传到私人存储库:

  • 0.0.1
  • 0.0.2
  • 0.0.2+0.0.2+18.g5a127f2.dirty

我的问题是现在当我使用

pip install mypackage==0.0.2

当我期望得到0.0.2时,我得到了版本0.0.2+0.0.2+18.g5a127f2.dirty

有没有办法让 pip 忽略“本地版本”并只安装确切的版本,而无需我上传到不同的索引(即暂存和稳定)?

编辑:

我尝试使用--no-cache-dir-I 标志,但问题仍然存在; pip 更喜欢 0.0.2+ 版本而不是 0.0.2 版本。

附加编辑:

我正在使用pip 18.0 和 Python 2.7

【问题讨论】:

  • 您是否为您的项目使用不同的 venv。你试过了吗:pip install --force-reinstall
  • 您在寻找pip install --no-cache-dir 吗?
  • 感谢您指出这一点——我已经尝试了这两个选项,但它们产生了相同的结果。我的期望是当 pip 可以找到两个版本时,它应该选择指定的版本(逐字),但也许这不是 pip 在这种情况下的工作方式?
  • 我无法使用简单的本地 PyPI 存储库设置 as described here 重现此问题。 pip install pkg==X 完全安装版本 X。我建议检查你的私有 repo 服务器的 HTTP 请求日志,也许你会从那里得到一些信息。
  • 在 Python 3.6.4 中使用 pip==18.0

标签: python pip


【解决方案1】:

根据distutils

在发布编号之后,您可以有一个预发布或发布后标签。预发布标签使版本被视为 比它们附加到的版本。因此,修订版 2.4 比修订版 2.4c1 更新,而修订版 2.4c1 又比 2.4b1 或 2.4a1 更新。发布后标签使版本被视为比它们附加到的版本更新。因此,像 2.4-1 和 2.4pl3 这样的修订版本比 2.4 更新,但比 2.4.1(版本号更高)旧。

所以,虽然不是我正在寻找的解决方案(下面的完整答案),但它看起来像这样有效:

pip install "mypackage<=0.0.2"

关于发布后的 distutils 宣传似乎违背了 PEP440 中指定的内容

[示例:...] == 3.1:特别是版本 3.1(或 3.1.0),不包括所有预发布、发布后、开发版本和任何 3.1.x 维护版本。

...但我对如何确定某个内容是“发布”还是“预发布”仍然有些模糊。

尽管如此,我的问题的答案似乎是:使用Aribitrary Equality

pip install mypackage===0.0.2

这给了我指定的版本,忽略带有任何 pre/post/dev 细节的版本。

【讨论】:

    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 2011-05-06
    • 2015-11-28
    • 1970-01-01
    • 2016-06-30
    • 2020-07-06
    • 2022-11-24
    • 2019-08-25
    相关资源
    最近更新 更多