使用替代包索引
虽然 uv
默认使用官方的 Python 包索引(PyPI),但它也支持替代包索引。大多数替代索引需要各种形式的身份验证,这需要一些初始设置。
重要
如果使用 pip
接口,请阅读 uv
中关于使用多个索引的文档 —— 默认行为与 pip
不同,以防止依赖混淆攻击,但这意味着 uv
可能找不到你期望的包版本。
Azure Artifacts
uv
可以从Azure Artifacts 安装包,既可以使用个人访问令牌(PAT),也可以使用keyring
包。
要使用 Azure Artifacts,请将索引添加到你的项目中:
[[tool.uv.index]]
name = "private-registry"
url = "https://pkgs.dev.azure.com/<ORGANIZATION>/<PROJECT>/_packaging/<FEED>/pypi/simple/"
使用 Azure 访问令牌进行身份验证
如果有可用的个人访问令牌(PAT)(例如,Azure 管道中的 $(System.AccessToken)
),则可以通过 “Basic” HTTP 身份验证方案提供凭据。将 PAT 包含在 URL 的密码字段中。用户名也必须包含在内,但可以是任意字符串。
例如,若令牌存储在 $AZURE_ARTIFACTS_TOKEN
环境变量中,可使用以下命令为索引设置凭据:
export UV_INDEX_PRIVATE_REGISTRY_USERNAME=dummy
export UV_INDEX_PRIVATE_REGISTRY_PASSWORD="$AZURE_ARTIFACTS_TOKEN"
注意
PRIVATE_REGISTRY
应与 pyproject.toml
中定义的索引名称匹配。
使用 keyring
和 artifacts-keyring
进行身份验证
你还可以使用keyring
包以及artifacts-keyring
插件对 Artifacts 进行身份验证。由于这两个包是对 Azure Artifacts 进行身份验证所必需的,因此必须从 Artifacts 以外的源进行预安装。
artifacts-keyring
插件封装了Azure Artifacts 凭据提供程序工具。该凭据提供程序支持几种不同的身份验证模式,包括交互式登录 —— 有关配置信息,请参阅该工具的文档。
uv 仅支持在子进程模式下使用 keyring
包。keyring
可执行文件必须在 PATH
中,即需全局安装或安装在活动环境中。keyring
CLI 需要在 URL 中有一个用户名,且必须为 VssSessionToken
。
启用密钥环身份验证
export UV_KEYRING_PROVIDER=subprocess
设置索引的用户名
export UV_INDEX_PRIVATE_REGISTRY_USERNAME=VssSessionToken
!!! 注意
可以使用[`tool.uv.keyring-provider`](../../reference/settings.md#keyring-provider)
设置在 `uv.toml` 或 `pyproject.toml` 中启用密钥环。
同样,索引的用户名可以直接添加到索引 URL 中。
### 将包发布到 Azure Artifacts
如果你还想将自己的包发布到 Azure Artifacts,可以按照[构建和发布指南](../package.md)中所述使用 `uv publish`。
首先,向要发布包的索引添加 `publish-url`。例如:
```toml title="pyproject.toml" hl_lines="4"
[[tool.uv.index]]
name = "private-registry"
url = "https://pkgs.dev.azure.com/<ORGANIZATION>/<PROJECT>/_packaging/<FEED>/pypi/simple/"
publish-url = "https://pkgs.dev.azure.com/<ORGANIZATION>/<PROJECT>/_packaging/<FEED>/pypi/upload/"
然后,配置凭据(如果不使用密钥环):
并发布包:
要在不向项目添加 publish-url
的情况下使用 uv publish
,可以设置 UV_PUBLISH_URL
:
$ export UV_PUBLISH_URL=https://pkgs.dev.azure.com/<ORGANIZATION>/<PROJECT>/_packaging/<FEED>/pypi/upload/
$ uv publish
请注意,此方法不太可取,因为在上传构件之前,uv 无法检查包是否已发布。
谷歌云Artifact Registry
uv 可以从谷歌云Artifact Registry安装软件包,既可以使用访问令牌,也可以使用keyring
软件包。
注意
本指南假定已安装并认证了gcloud
命令行工具。
要使用谷歌云Artifact Registry,需将索引添加到项目中:
[[tool.uv.index]]
name = "private-registry"
url = "https://<REGION>-python.pkg.dev/<PROJECT>/<REPOSITORY>"
使用谷歌访问令牌进行身份验证
可以通过 “Basic” HTTP 身份验证方案提供凭据。在 URL 的密码字段中包含访问令牌。用户名必须为 oauth2accesstoken
,否则身份验证将失败。
使用 gcloud
生成令牌:
注意
你可能需要传递额外的参数才能正确生成令牌(如 --project
),这只是一个基本示例。
然后使用以下命令为索引设置凭据:
export UV_INDEX_PRIVATE_REGISTRY_USERNAME=oauth2accesstoken
export UV_INDEX_PRIVATE_REGISTRY_PASSWORD="$ARTIFACT_REGISTRY_TOKEN"
注意
PRIVATE_REGISTRY
应与 pyproject.toml
中定义的索引名称匹配。
使用 keyring
和 keyrings.google-artifactregistry-auth
进行身份验证
你还可以使用keyring
包以及keyrings.google-artifactregistry-auth
插件 对 Artifact Registry 进行身份验证。由于需要这两个包才能对 Artifact Registry 进行身份验证,因此必须从 Artifact Registry 以外的源进行预安装。
keyrings.google-artifactregistry-auth
插件封装了gcloud CLI,用于生成短期访问令牌,将其安全存储在系统密钥环中,并在令牌过期时进行刷新。
uv 仅支持在子进程模式下使用 keyring
包。keyring
可执行文件必须在 PATH
中,即需全局安装或安装在活动环境中。keyring
CLI 需要在 URL 中提供用户名,且必须为 oauth2accesstoken
。
# 从公共 PyPI 预安装 keyring 和 Artifact Registry 插件
uv tool install keyring --with keyrings.google-artifactregistry-auth
# 启用 keyring 身份验证
export UV_KEYRING_PROVIDER=subprocess
# 设置索引的用户名
export UV_INDEX_PRIVATE_REGISTRY_USERNAME=oauth2accesstoken
向 Google Artifact Registry 发布包
如果你还想将自己的包发布到 Google Artifact Registry,可以按照 构建与发布指南 中所述,使用 uv publish
。
首先,向你要发布包的索引添加 publish-url
。例如:
[[tool.uv.index]]
name = "private-registry"
url = "https://<REGION>-python.pkg.dev/<PROJECT>/<REPOSITORY>"
publish-url = "https://<REGION>-python.pkg.dev/<PROJECT>/<REPOSITORY>"
$ export UV_PUBLISH_USERNAME=oauth2accesstoken
$ export UV_PUBLISH_PASSWORD="$ARTIFACT_REGISTRY_TOKEN"
publish-url
的情况下使用 uv publish
,可以设置 UV_PUBLISH_URL
:
请注意,这种方法不太可取,因为在上传构件之前,uv 无法检查包是否已经发布。
AWS CodeArtifact
uv 可以从 AWS CodeArtifact 安装包,既可以使用访问令牌,也可以使用 keyring
包。
注意
本指南假定已安装并认证了 awscli
。
索引可以这样声明:
[[tool.uv.index]]
name = "private-registry"
url = "https://<DOMAIN>-<ACCOUNT_ID>.d.codeartifact.<REGION>.amazonaws.com/pypi/<REPOSITORY>/simple/"
使用 AWS 访问令牌进行身份验证
可通过 “Basic” HTTP 身份验证方案提供凭证。将访问令牌包含在 URL 的密码字段中。用户名必须为 aws
,否则身份验证将失败。
使用 awscli
生成令牌:
export AWS_CODEARTIFACT_TOKEN="$(
aws codeartifact get-authorization-token \
--domain <DOMAIN> \
--domain-owner <ACCOUNT_ID> \
--query authorizationToken \
--output text
)"
注意
你可能需要传递额外的参数才能正确生成令牌(如 --region
),这只是一个基本示例。
然后使用以下命令为索引设置凭证:
export UV_INDEX_PRIVATE_REGISTRY_USERNAME=aws
export UV_INDEX_PRIVATE_REGISTRY_PASSWORD="$AWS_CODEARTIFACT_TOKEN"
注意
PRIVATE_REGISTRY
应与你 pyproject.toml
中定义的索引名称匹配。
使用 keyring
和 keyrings.codeartifact
进行身份验证
你还可以使用带有keyrings.codeartifact
插件的keyring
包对 Artifact Registry 进行身份验证。由于这两个包是对 Artifact Registry 进行身份验证所必需的,因此必须从 Artifact Registry 以外的源进行预安装。
keyrings.codeartifact
插件封装了 boto3 以生成短期访问令牌,将其安全存储在系统密钥环中,并在令牌过期时进行刷新。
uv 仅支持在子进程模式下使用 keyring
包。keyring
可执行文件必须在 PATH
中,即全局安装或安装在活动环境中。keyring
CLI 需要 URL 中的用户名,且必须为 aws
。
# 从公共 PyPI 预安装 keyring 和 AWS CodeArtifact 插件
uv tool install keyring --with keyrings.codeartifact
# 启用 keyring 身份验证
export UV_KEYRING_PROVIDER=subprocess
设置索引的用户名
export UV_INDEX_PRIVATE_REGISTRY_USERNAME=aws
!!! 注意
可以在 `uv.toml` 或 `pyproject.toml` 中使用[`tool.uv.keyring-provider`](../../reference/settings.md#keyring-provider) 设置来启用密钥环。
同样,索引的用户名可以直接添加到索引 URL 中。
### 将包发布到 AWS CodeArtifact
如果你还想将自己的包发布到 AWS CodeArtifact,可以按照[构建与发布指南](../package.md)中所述使用 `uv publish`。
首先,向要发布包的索引添加 `publish-url`。例如:
```toml title="pyproject.toml" hl_lines="4"
[[tool.uv.index]]
name = "private-registry"
url = "https://<DOMAIN>-<ACCOUNT_ID>.d.codeartifact.<REGION>.amazonaws.com/pypi/<REPOSITORY>/simple/"
publish-url = "https://<DOMAIN>-<ACCOUNT_ID>.d.codeartifact.<REGION>.amazonaws.com/pypi/<REPOSITORY>/"
然后,配置凭证(如果不使用密钥环):
并发布包:
若要在不向项目添加 publish-url
的情况下使用 uv publish
,可以设置 UV_PUBLISH_URL
:
$ export UV_PUBLISH_URL=https://<DOMAIN>-<ACCOUNT_ID>.d.codeartifact.<REGION>.amazonaws.com/pypi/<REPOSITORY>/
$ uv publish
请注意,这种方法不太可取,因为在上传构件之前,uv 无法检查包是否已发布。
其他包索引
据了解,uv 也适用于 JFrog 的 Artifactory。