Python 私有PyPI的pip.conf中的凭据
我有一个私人的PyPI存储库。是否有类似于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
.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之外存储用户名和密码?如何将用户名/密码存储为环境变量
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始终忽略配置的密码。我在这里问了一个新问题。