【问题标题】:How to setup two PyPI indices如何设置两个 PyPI 索引
【发布时间】:2020-09-07 22:48:20
【问题描述】:

我有一个本地 GitLab 安装,附带一个本地 PyPI 服务器来存储公司内部 Python 包。

如何配置我的 PyPI 以在两个索引服务器中搜索包?

我阅读了有关.pypirc / pip/pip.ini 的信息并找到了各种设置,但到目前为止还没有解决方案。

  1. 大多数解决方案将所有搜索永久切换到其他索引服务器。但我希望能够像往常一样从 pypi.org 安装和更新包,而一些包来自本地索引。
  2. 将多个索引服务器设置为使用凭据仅限于 distutils(例如通过 twine 使用),但不被 pip 使用
  3. 如果在[global][install] 中配置索引服务器会出现混淆。我假设后者是pip install 的规则子集。 (这里的文档不清楚。)
  4. 虽然 twine 可以引用配置文件中的存储库条目,例如 -r gitlab 引用 [gitlab] 部分,但 pip 不能使用这样的命名引用...

那么我想要达到的目标:

  • pip 应该能够安装和更新来自 pypi.org 的常规软件包,例如 colorama
  • pip 应该能够从 gitlab.company.com 安装和更新软件包
    • 必须使用用户名 (__token__) 和密码 (7a3b62342c784d87) 进行身份验证

目前的实验:

[global]


[install]
find-links =
    https://pypi.org
    https://gitlab.company.de/api/v4/projects/2142423/packages/pypi
trusted-host =
    https://pypi.org
    https://gitlab.company.de/api/v4/projects/2142423/packages/pypi

[distutils]
index-servers =
    gitlab

[gitlab]
repository = https://gitlab.company.de/api/v4/projects/2142423/packages/pypi
username = __token__
password = geheim

【问题讨论】:

  • 当您说“搜索”时,您的字面意思是来自pip search 的结果吗?或者只是想从pip install 安装?如果是后者,stackoverflow.com/questions/30889494/… 应该会为您解答。
  • "search" 泛指搜索,而不是pip search 命令。
  • @DustinIngram 我假设您指的是--extra-index-url。但它如何处理凭据?我只看到一个 URL。我不想在每个pip ***command 上手动输入或复制/粘贴一个长令牌。
  • 我想你正在寻找这样的东西 --> devpi.net/docs/devpi/devpi/stable/%2Bd/index.html

标签: python pip gitlab pypi gitlab-api


【解决方案1】:

目标

  1. pip install 应该从 GitLab 和 PyPi 仓库安装/更新软件包。如果两者中都存在相同的包,则首选
  2. pip install 应该支持身份验证。首选,如果我们能以某种方式让它从配置文件中读取,这样我们就不需要重复指定它。

理论

  1. pip install 支持 --extra-index-url 指定额外的 PyPi 索引。也可以通过pip.conf 文件提供。
  2. pip 使用支持~/.netrcrequests 作为配置文件(docs)

步骤

  1. pip config -v list 建议的任何位置创建pip.conf(如果在Windows 上为pip.ini)。
  2. 将您的 GitLab PyPi 索引 URL 添加到 pip.conf
[install]
extra-index-url = https://gitlab.com/api/v4/projects/12345678/packages/pypi/simple
  1. 创建或更新您的 ~/.netrc 文件并为 GitLab 添加您的身份验证详细信息。
machine gitlab.com
    login <token-name>
    password <token-pass>
  1. 我们现在可以像pip install &lt;package-name&gt; 一样简单地安装软件包。 pip 现在将查看这两个索引以查找您的包,优先提供给index-url 指向的那个。

其他信息

  1. 如果支持多个索引,pip search 也可能会出现同样的情况。到那时,需要手动指定应该使用哪个 PyPi 索引 URL。 GitLab 似乎不支持 pip search,因为它在指定为 PyPi 索引时抛出 415 Client Error: Unsupported Media Type
  2. 至于您的疑问,pip.conf 中的每个部分都指向该特定命令,[install]pip install 提供配置,[search]pip search 提供配置等等。 [global] 可能是指可以为所有命令指定的参数,无论是pip install 还是pip search
  3. .pypirc 文件专门用于配置与上传相关的包索引(由 twine/flint 使用),其中 pip.conf 与配置 pip 相关联,后者管理本地系统上的 python 包。

【讨论】:

【解决方案2】:

试试这个(基于来自https://github.com/pypa/pip/issues/6797Can pip.conf specify two index-url at the same time? 的信息):

[global]
index-url = http://pypi.org/simple
trusted-host = pypi.org
               gitlab.company.de
extra-index-url= https://username:password@gitlab.company.de/api/v4/projects/2142423/packages/pypi

【讨论】:

    猜你喜欢
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 2019-09-16
    • 2017-05-31
    相关资源
    最近更新 更多