私有PyPI的pip.conf中的凭据

时间:2018-05-22 13:27:54

标签: python pip config pypi

我有一个私有的PyPI存储库。有没有办法在pip.conf中存储与.pypirc类似的凭据?

我的意思。目前在.pypirc您可以进行此类配置:

[distutils]
index-servers = custom

[custom]
repository: https://pypi.example.com
username: johndoe
password: changeme

从我发现你可以放入pip.conf

[global]
index = https://username:password@pypi.example.com/pypi
index-url = https://username:password@pypi.example.com/simple
cert = /etc/ssl/certs/ca-certificates.crt

但在这里我看到两个问题:

  1. 对于每个网址,您每次都需要指定相同的用户名和密码。
  2. 用户名和密码在日志中可见,因为它们是网址的一部分。
  3. 有没有办法在网址外存储用户名和密码?

4 个答案:

答案 0 :(得分:1)

如何将用户名/密码存储为环境变量,

export username=username
export password=password

,并在pip.conf中像这样引用它们:

[global]
index = https://$username:$password@pypi.example.com/pypi
index-url = https://$username:$password@pypi.example.com/simple
cert = /etc/ssl/certs/ca-certificates.crt

我使用Gitlab CI的秘密变量来存储凭证。在CI工具中检查等效项。

答案 1 :(得分:1)

您可以像这样存储供Pip使用的凭据在~/.netrc

machine pypi.example.com
    login johndoe
    password changeme

Pip在访问https://pypi.example.com时将使用这些凭据,但不会记录它们。您必须单独指定索引服务器(例如在问题中的pip.conf中指定)。

请注意,~/.netrc必须归用户pip所执行。同样,任何其他用户都不能读取它。无效文件将被静默忽略。您可以像这样确保权限正确:

chown $USER ~/.netrc
chmod 0600 ~/.netrc

此权限检查在Python 3.4之前不适用,但这在任何情况下都是一个好主意。

内部Pip在发出HTTP请求时使用requests。请求使用标准库netrc模块读取文件,因此字符集仅限于ASCII子集。

答案 2 :(得分:0)

请在https://github.com/pypa/pip/issues/4789上请求此功能

正确的答案应该是PIP_USERNAME,如麻线一样为PIP_PASSWORD

答案 3 :(得分:0)

鉴于issue 4789仍处于打开状态,您可以在requirements.txt中使用以下方法:

--extra-index-url=https://${PYPI_USERNAME}:${PYPI_PASSWORD}@my.privatepypi.com
private-package==1.2.3
...

如果尝试在设置了这些环境变量的情况下运行pip install requirements.txt,则会发现pip仍然要求提供凭据。这是因为pip不会像人们期望的那样对表达式${PYPI_USERNAME}进行插值,而是通过url对其进行编码。在此示例中,您的用户名和密码表示为https://%24%7BPYPI_USERNAME%7D:%24%7BPYPI_PASSWORD%7D@my.privatepypi.com

这里的工作,我承认应该有更好的方法,但是我们可以将pip作为脚本运行:

python3 -m pip install -r requirements.txt

来自男人:

 -m module-name
    Searches sys.path for the named module and runs the corresponding .py file as a script.