认证
Git 认证
uv 允许从 Git 安装软件包,并支持以下用于对私有仓库进行认证的方案。
使用 SSH:
- git+ssh://git@<hostname>/...
(例如,git+ssh://git@github.com/astral-sh/uv
)
- git+ssh://git@<host>/...
(例如,git+ssh://git@github.com-key-2/astral-sh/uv
)
有关如何配置 SSH 的更多详细信息,请参阅GitHub SSH 文档。
使用密码或令牌:
- git+https://<user>:<token>@<hostname>/...
(例如,git+https://git:github_pat_asdf@github.com/astral-sh/uv
)
- git+https://<token>@<hostname>/...
(例如,git+https://github_pat_asdf@github.com/astral-sh/uv
)
- git+https://<user>@<hostname>/...
(例如,git+https://git@github.com/astral-sh/uv
)
使用 GitHub 个人访问令牌时,用户名是任意的。GitHub 不支持直接使用密码登录,不过其他主机可能支持。如果提供的用户名没有凭证,系统将提示您输入凭证。
如果 URL 中没有凭证且需要进行认证,系统将查询Git 凭证助手。
HTTP 身份验证
uv 在查询包注册中心时支持通过 HTTP 提供凭证。
身份验证信息可来自以下来源,按优先级顺序排列:
- URL,例如 https://<user>:<password>@<hostname>/...
- .netrc
配置文件
- 密钥环 提供程序(需要手动启用)
如果为单个索引 URL 或网络位置(协议、主机和端口)找到身份验证信息,它将在命令执行期间被缓存,并用于对该索引或网络位置的其他查询。uv 的不同调用之间不会缓存身份验证信息。
默认情况下启用 .netrc
身份验证,如果定义了 NETRC
环境变量,将使用该变量指定的文件,否则将回退到 ~/.netrc
。
要启用基于密钥环的身份验证,可在命令行中给 uv 传递 --keyring-provider subprocess
参数,或设置 UV_KEYRING_PROVIDER=subprocess
。
身份验证可用于以下上下文中指定的主机:
- [index]
- index-url
- extra-index-url
- find-links
- package @ https://...
有关索引 URL 身份验证的详细信息,请参阅 索引身份验证文档。
有关与 pip
的差异的详细信息,请参阅 pip
兼容性指南。
与替代包索引进行身份验证
有关与流行的替代 Python 包索引进行身份验证的详细信息,请参阅 替代索引集成指南。
自定义 CA 证书
默认情况下,uv 会从捆绑的 webpki-roots
库加载证书。webpki-roots
是一组来自 Mozilla 的可靠信任根,将它们包含在 uv 中可提高可移植性和性能(特别是在 macOS 上,读取系统信任存储会导致明显延迟)。
然而,在某些情况下,你可能希望使用平台的原生证书存储,尤其是当你依赖公司信任根(例如,用于强制代理)且该信任根已包含在系统证书存储中时。要指示 uv 使用系统信任存储,请使用 --native-tls
命令行标志运行 uv,或将 UV_NATIVE_TLS
环境变量设置为 true
。
如果需要证书的直接路径(例如在持续集成中),将 SSL_CERT_FILE
环境变量设置为证书捆绑包的路径,以指示 uv 使用该文件而不是系统信任存储。
如果需要客户端证书身份验证(mTLS),将 SSL_CLIENT_CERT
环境变量设置为包含证书及随后私钥的 PEM 格式文件的路径。
最后,如果你使用的设置需要信任自签名证书或以其他方式禁用证书验证,可以通过 allow-insecure-host
配置选项指示 uv 允许与特定主机建立不安全连接。例如,在 pyproject.toml
中添加以下内容将允许与 example.com
建立不安全连接:
allow-insecure-host
预期接收主机名(例如 localhost
)或主机名 - 端口对(例如 localhost:8080
),并且仅适用于 HTTPS 连接,因为 HTTP 连接本质上就是不安全的。
谨慎使用 allow-insecure-host
,并且仅在受信任的环境中使用,因为由于缺乏证书验证,它可能会使你面临安全风险。