【问题标题】:pip getting package from python's pypi instead of my own serverpip 从 python 的 pypi 而不是我自己的服务器获取包
【发布时间】:2018-12-12 14:15:40
【问题描述】:

出于某种我无法理解的原因,pip 正在从全局的 pypi 而不是我自己的服务器获取包。我的包,我们称之为foo,有一个依赖bar

pip search --index-url https://example.com/simple foo

退回我的包裹。

pip install --index-url https://example.com/simple foo

导致错误,因为它无法下载bar

  Could not find a version that satisfies the requirement bar (from foo) (from versions: )
No matching distribution found for bar (from foo)

pip install --index-url https://example.com/simple --extra-index-url https://pypi.python.org/simple foo

好的,所以问题现在应该解决了吧?它会从我的索引中获得foo,从pypi获得bar,对吗?好吧……恐怕事实并非如此。使用此配置,它不会从我的索引中下载foo,而是下载pypi 中的foo 包。即使在安装之后,如果我再次运行pip search foo,它会检测到我的为latest,但全局检测为installed

为了测试的目的,为了有一个干净的基线,我尝试了python:3.7-alpine,结果相同。

作为一种解决方法,我已将包的版本设置为yzt-0.1,以便我可以专门安装foo:yzt-0.1,由于它在全局中找不到它,它将从我的仓库安装。

【问题讨论】:

  • 您是否尝试过相反的方法? pip install foo --extra-index-url https://example.com/simple
  • 服务器使用对我来说是正确的;可能是 python 版本/abi/平台不匹配。您将哪些文件上传到您的服务器以及您要在哪个平台上安装?此外,pip install -vvv 将为您提供有关在哪个服务器上找到哪些软件包的更多信息。

标签: python pip


【解决方案1】:

好的,问题在于 pip 的工作方式。如果未指定版本,它将始终下载最新版本,即使这意味着从 extra 索引中获取它,而另一个版本存在于主索引中。

在我的例子中,我的包是 0.1,但是在 pypi 中有一个与 0.1.1 同名的包,所以当我通过 --extra-index-url https://pypi.python.org/simple 来安装依赖项时,pip 实际上正在使用该索引也可以下载0.1.1 版本。

因此,总而言之,当您在不同的存储库中有两个不同的包但名称相同的情况时,您有两种选择来确保一切都按预期工作:

  • 将包的名称更改为独特的名称,例如username-packagename
  • 为版本添加一些 ID,以便您可以安装该特定版本。为什么是身份证?因为pypi中的包可能和你的版本一样。

就我而言,我更喜欢第二个,因为它更干净。第一个你需要import username-packagename 这是更丑的IMO。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 2014-06-26
    • 2019-07-22
    • 2017-09-09
    • 2020-01-11
    相关资源
    最近更新 更多