跳转至

使用替代包索引

虽然 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"

注意

PRIVATE_REGISTRY 应与 pyproject.toml 中定义的索引名称匹配。

使用 keyringartifacts-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

!!! 注意

    可以使用[`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 软件包。

注意

本指南假定已安装并认证了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
)

注意

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

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

export UV_INDEX_PRIVATE_REGISTRY_USERNAME=oauth2accesstoken
export UV_INDEX_PRIVATE_REGISTRY_PASSWORD="$ARTIFACT_REGISTRY_TOKEN"

注意

PRIVATE_REGISTRY 应与 pyproject.toml 中定义的索引名称匹配。

使用 keyringkeyrings.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

注意

可以使用tool.uv.keyring-provider 设置在 uv.tomlpyproject.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 包。

注意

本指南假定已安装并认证了 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
)"

注意

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

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

export UV_INDEX_PRIVATE_REGISTRY_USERNAME=aws
export UV_INDEX_PRIVATE_REGISTRY_PASSWORD="$AWS_CODEARTIFACT_TOKEN"

注意

PRIVATE_REGISTRY 应与你 pyproject.toml 中定义的索引名称匹配。

使用 keyringkeyrings.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>/"

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

$ 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。