跳转至

使用替代包索引

虽然 uv 默认使用官方的 Python 包索引(PyPI),但它也支持替代包索引。大多数替代索引需要各种形式的身份验证,这需要一些初始设置。

重要

如果使用 pip 接口,请阅读 uv 中关于使用多个索引的文档 —— 默认行为与 pip 不同,以防止依赖混淆攻击,但这意味着 uv 可能找不到你期望的包版本。

Azure Artifacts

uv 可以从Azure Artifacts 安装包,既可以使用个人访问令牌(PAT),也可以使用keyring 包。

要使用 Azure Artifacts,请将索引添加到你的项目中:

pyproject.toml
[[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"

Tip

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。

# 从公共 PyPI 预安装 keyring 和 Artifacts 插件
uv tool install keyring --with artifacts-keyring

启用密钥环身份验证

export UV_KEYRING_PROVIDER=subprocess

设置索引的用户名

export UV_INDEX_PRIVATE_REGISTRY_USERNAME=VssSessionToken

!!! tip

    可以使用[`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/"

然后,配置凭据(如果不使用密钥环):

$ export UV_PUBLISH_USERNAME=dummy
$ export UV_PUBLISH_PASSWORD="$AZURE_ARTIFACTS_TOKEN"

并发布包:

$ uv publish --index private-registry

要在不向项目添加 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 软件包。

Tip

本指南假定已安装并认证了gcloud 命令行工具。

要使用谷歌云Artifact Registry,需将索引添加到项目中:

pyproject.toml
[[tool.uv.index]]
name = "private-registry"
url = "https://<REGION>-python.pkg.dev/<PROJECT>/<REPOSITORY>"

使用谷歌访问令牌进行身份验证

可以通过 “Basic” HTTP 身份验证方案提供凭据。在 URL 的密码字段中包含访问令牌。用户名必须为 oauth2accesstoken,否则身份验证将失败。

使用 gcloud 生成令牌:

export ARTIFACT_REGISTRY_TOKEN=$(
    gcloud auth application-default print-access-token
)

Tip

你可能需要传递额外的参数才能正确生成令牌(如 --project),这只是一个基本示例。

然后使用以下命令为索引设置凭据:

export UV_INDEX_PRIVATE_REGISTRY_USERNAME=oauth2accesstoken
export UV_INDEX_PRIVATE_REGISTRY_PASSWORD="$ARTIFACT_REGISTRY_TOKEN"

Tip

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

Tip

可以使用tool.uv.keyring-provider 设置在 uv.toml 或 pyproject.toml 中启用 keyring。

同样,索引的用户名可以直接添加到索引 URL 中。

向 Google Artifact Registry 发布包

如果你还想将自己的包发布到 Google Artifact Registry,可以按照 构建与发布指南 中所述,使用 uv publish。 首先,向你要发布包的索引添加 publish-url。例如:

pyproject.toml
[[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"
接着发布包:
$ uv publish --index private-registry
若要在不向项目添加 publish-url 的情况下使用 uv publish,可以设置 UV_PUBLISH_URL:
$ export UV_PUBLISH_URL=https://<REGION>-python.pkg.dev/<PROJECT>/<REPOSITORY>
$ uv publish
请注意,这种方法不太可取,因为在上传构件之前,uv 无法检查包是否已经发布。

AWS CodeArtifact

uv 可以从 AWS CodeArtifact 安装包,既可以使用访问令牌,也可以使用 keyring 包。

Tip

本指南假定已安装并认证了 awscli。

索引可以这样声明:

pyproject.toml
[[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
)"

Tip

你可能需要传递额外的参数才能正确生成令牌(如 --region),这只是一个基本示例。

然后使用以下命令为索引设置凭证:

export UV_INDEX_PRIVATE_REGISTRY_USERNAME=aws
export UV_INDEX_PRIVATE_REGISTRY_PASSWORD="$AWS_CODEARTIFACT_TOKEN"

Tip

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

!!! tip

    可以在 `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>/"

然后,配置凭证(如果不使用密钥环):

$ export UV_PUBLISH_USERNAME=aws
$ export UV_PUBLISH_PASSWORD="$AWS_CODEARTIFACT_TOKEN"

并发布包:

$ uv publish --index private-registry

若要在不向项目添加 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。