【问题标题】:pip install upgrade fail to upgrade private dependencypip install upgrade 升级私有依赖失败
【发布时间】:2021-05-04 05:55:31
【问题描述】:

背景:pip支持ssh链接后缀带

  1. 分行名称,
  2. 提交哈希,
  3. 标签名称
  4. 一个 git ref

但是,pip 在升级某些依赖于这些 ssh 链接的包时存在问题。

在名为 CurrentPackage 的 5.1.2 版包的 setup.py 中

install_requires=[
    "MyOwnPackage @ git+ssh://git@github.com/myusename/MyOwnPackage@master",
],

我然后 pip install --upgrade -e .

Requirement already satisfied, skipping upgrade: 
MyOwnPackage@git+ssh://git@github.com/myusename/MyOwnPackage@master from 
git+ssh://****@github.com/myusename/MyOwnPackage@master in 
/opt/anaconda3/lib/python3.8/site-packages (from CurrentPackage==5.1.2) (0.0.1)

master 分支已经是 0.0.2。 它显然没有将 MyOwnPackage 升级到新的 master 分支提交,仍然停留在 0.0.1。

【问题讨论】:

  • 1.首先,你不是指这个问题。 2.其次,指定版本是一种常见的做法,大量的python setup.py需要特定版本的依赖。
  • 当然,但是 VCS(git 等)是特殊情况。你不能指定版本号,但是你可以指定一个 git 标签,或者一个 git commit 来代替。
  • @sinoroc 感谢您指出这一点。我正在编辑我的问题。

标签: python pip


【解决方案1】:

pip 不检查远程引用在安装之间是否已更改。这意味着指向移动参考(就像您在此处一样)无法按预期工作。

我建议使用:

  • 特定的提交哈希或标签,当您想要进行升级时修改
  • 使用 --upgrade 调用 pip 以告诉它急切地环顾四周。
  • 将这些包转换为适当的分发包并使用 --find-links 或 --index-url 。

【讨论】:

  • --升级已被使用。我不想使用 Eager,因为它会将所有内容升级到最新版本。默认的仅在需要时就足够了。
  • @LukAron 在我看来这些是OR 的建议。使用 3 个中的一个(或者可能是 3 个的组合)。但我认为设置一个特定的(非移动的)git commit 或 git tag 就足够了,不需要在此之上强制使用--upgrade
  • @sinoroc 似乎 git commit 或 git tag 也不起作用,我稍后更新问题
  • 在您的问题中,您似乎使用了master。通常这是一个分支,或多或少是一个移动引用(即它并不总是指向同一个提交),所以我不推荐这样做。您确实应该使用非移动引用,例如特定的 git commit hash 或 git tag。 - 现在我不确定您所说的“不起作用”是什么意思。 -- pip 很可能看到它已经克隆并安装了master,那为什么还要再做一次呢?
【解决方案2】:

好的,我的结论是 pathetic 在 setup.py 中列出私有依赖 因为语法必须是

packagename @ git+ssh://git@github.com/myusename/packagename

简单地说

-e git+ssh://git@github.com/myusename/MyOwnPackage==0.0.2

在 requirements.txt 中

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 1970-01-01
    • 2021-06-01
    • 2022-01-11
    • 2021-06-03
    • 1970-01-01
    • 2021-10-16
    • 2021-08-16
    • 2018-12-17
    相关资源
    最近更新 更多