Python 私有PyPI的pip.conf中的凭据

Python 私有PyPI的pip.conf中的凭据,python,pip,config,pypi,Python,Pip,Config,Pypi,我有一个私人的PyPI存储库。是否有类似于.pypirc的方法在pip.conf中存储凭据 我的意思是。当前在.pypirc中,您可以进行以下配置: [distutils] index-servers = custom [custom] repository: https://pypi.example.com username: johndoe password: changeme 根据我的发现,您可以输入pip.conf: [global] index = https://username

我有一个私人的PyPI存储库。是否有类似于
.pypirc
的方法在
pip.conf
中存储凭据

我的意思是。当前在
.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
但在这里我看到两个问题:

  • 对于每个url,您每次都需要指定相同的用户名和密码
  • 用户名和密码在日志中可见,因为它们是url的一部分

  • 有没有办法在url之外存储用户名和密码?

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

    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工具中检查等效项。

    您可以存储Pip在
    ~/.netrc
    中使用的凭据,如下所示:

    machine pypi.example.com
        login johndoe
        password changeme
    
    Pip在访问
    https://pypi.example.com
    但不会记录它们。必须单独指定索引服务器(如问题中的
    pip.conf

    请注意,
    ~/.netrc
    必须由用户所有
    pip
    执行为。它也不能被任何其他用户读取。无效文件将被静默忽略。您可以确保权限正确,如下所示:

    machine pypi.example.com
        login johndoe
        password changeme
    
    chown$USER~/.netrc
    chmod 0600~/.netrc
    
    这种权限检查在Python3.4之前不适用,但在任何情况下都是一个好主意


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

    请在上请求此功能

    正确答案应为PIP_用户名,PIP_密码(如twine中所示)仍处于打开状态,您可以在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%7bpyppi_用户名%7D:%24%7bpyppi_密码%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.
    

    我想知道pip是否可以使用ssh连接并使用ssh密钥进行身份验证。SSL证书也可用于对用户进行身份验证,但当然,为此,您需要更改http服务器处理请求的方式。例如2。您可以禁止使用标准日志记录
    pip install-q package name
    ,如果您仍然希望在某个地方获得完整的详细日志,您可以添加
    --log
    选项,并指向第二部分的文件@MarkAWard的建议似乎可以解决问题。感谢您的回复!实际上我一开始是按照你的建议做的。我还使用GitLab CI,并将用户名和密码存储为环境变量。问题是,
    pip安装
    在输出日志中显示用户名和密码。但这里来自@MarkAWard的建议有所帮助。目前只剩下一个问题,您是否知道是否有办法禁止GtiLab CI中的
    echo$username
    echo$password
    输出?@rahul您使用的是什么版本的pip。我无法在pip.conf中使用大括号和不使用大括号选项解析环境变量。这是否已解析?甚至我也无法在pip.conf中解析变量。我使用的是8.0.2版,但也无法正常工作。很高兴有你,谢谢!这很有效。奇怪的是,
    pip
    如果依赖于
    请求,它本身就没有这样的功能。这太棒了!使用
    .netrc
    pip.conf
    之间的一个重要区别是,在
    .netrc
    中,带有特殊字符的密码不能是URL编码的,而在
    pip.conf
    中是必需的。作为补充说明,对于那些想知道的人,此解决方案可在linux和windows上运行。您好@twm我尝试了您的解决方案,但pip始终忽略配置的密码。我在这里问了一个新问题。