7

我有一个本地 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
4

2 回答 2

5

目标

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

理论

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

脚步

  1. 在. pip.conf_ pip.ini_pip config -v list
  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 <package-name>. pip现在将查看这两个索引以查找您的包,优先选择由index-url.

附加信息

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

试试这个(基于来自https://github.com/pypa/pip/issues/6797Can pip.conf 可以同时指定两个 index-url 的信息?):

[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
于 2020-09-28T16:41:18.337 回答