如何设置两个PyPI索引

问题描述

我有一个本地GitLab安装程序,它带有一个本地PyPI服务器,用于存储公司内部的Python程序包。

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

我了解了.pypirc / pip/pip.ini,发现了各种设置,但到目前为止还没有解决办法。

  1. 大多数解决方案将所有搜索永久切换到其他索引服务器。但是我希望能够像往常一样从pypi.org安装和更新软件包,而有些软件包来自本地索引。
  2. 使用凭据将多个索引服务器设置为接缝,仅限于distutils(例如,由twine使用),而pip不使用
  3. 如果在[global][install]中配置索引服务器,会造成混乱。我假设后一个pip install的规则子集。 (此处的文档尚不清楚。)
  4. 虽然麻线可以引用配置文件中的存储库条目,例如-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

解决方法

目标

  1. pip install应该从GitLab以及PyPi存储库安装/更新软件包。如果两个软件包中都存在相同的软件包,则首选PyPi。
  2. pip install应该支持身份验证。首选,如果可以通过某种方式使其从配置文件中读取,则无需重复指定。

理论

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

步骤

  1. pip.conf建议的任何位置创建一个pip.ini(如果是Windows,则为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,因为当指定为PyPi索引时,它会引发 415 Client Error:Unsupported Media Type
  2. 对于您的疑问,pip.conf中的每个部分都指向该特定命令,[install]pip install提供配置,[search]pip search提供等等。 。 [global]可能是指可以为所有命令pip installpip search指定的参数。
  3. .pypirc文件专门用于配置与上载相关的软件包索引(由twine / flint使用),其中pip.conf与配置pip关联,后者管理本地的python软件包系统。
,

尝试一下(基于来自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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...