pip.conf 中用于私有 PyPI 的凭据
Credentials in pip.conf for private 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
但是这里我看到两个问题:
- 对于每个 url,您每次都需要指定相同的用户名和密码。
- 用户名和密码在日志中可见,因为它们是 url.
的一部分
有没有办法在 url 之外存储用户名和密码?
如何将 Username/Password 存储为环境变量,
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
执行为。它也不能被任何其他用户读取。无效文件将被静默忽略。您可以像这样确保权限正确:
chown $USER ~/.netrc
chmod 0600 ~/.netrc
此权限检查在 Python 3.4 之前不适用,但在任何情况下都是一个好主意。
Pip 内部使用 requests when making HTTP requests. requests uses the standard library netrc 模块读取文件,因此字符集仅限于 ASCII 子集。
鉴于 issue 4789 仍然开放,您可以在 requirements.txt 中使用以下方法:
--extra-index-url=https://${PYPI_USERNAME}:${PYPI_PASSWORD}@my.privatepypi.com
private-package==1.2.3
...
如果您尝试 运行 pip install -r 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.
我知道它没有按照它的表述方式回答问题,但也可以使用 keyring
python 模块进行 pip 身份验证:
https://pypi.org/project/keyring/
https://pip.pypa.io/en/stable/topics/authentication/#keyring-support%3E
我有一个私人 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
但是这里我看到两个问题:
- 对于每个 url,您每次都需要指定相同的用户名和密码。
- 用户名和密码在日志中可见,因为它们是 url. 的一部分
有没有办法在 url 之外存储用户名和密码?
如何将 Username/Password 存储为环境变量,
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
执行为。它也不能被任何其他用户读取。无效文件将被静默忽略。您可以像这样确保权限正确:
chown $USER ~/.netrc
chmod 0600 ~/.netrc
此权限检查在 Python 3.4 之前不适用,但在任何情况下都是一个好主意。
Pip 内部使用 requests when making HTTP requests. requests uses the standard library netrc 模块读取文件,因此字符集仅限于 ASCII 子集。
鉴于 issue 4789 仍然开放,您可以在 requirements.txt 中使用以下方法:
--extra-index-url=https://${PYPI_USERNAME}:${PYPI_PASSWORD}@my.privatepypi.com
private-package==1.2.3
...
如果您尝试 运行 pip install -r 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.
我知道它没有按照它的表述方式回答问题,但也可以使用 keyring
python 模块进行 pip 身份验证:
https://pypi.org/project/keyring/
https://pip.pypa.io/en/stable/topics/authentication/#keyring-support%3E