2.7.10 与 Azure Artifacts 配合使用

原文链接: https://docs.astral.sh/uv/guides/integration/azure/

2.7.10 与 Azure Artifacts 配合使用

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

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

1
2
3
4
# 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 中时,这样为该索引设置凭据:

1
2
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 Credential Provider 工具。该凭据提供程序支持若干种身份验证模式,包括交互式登录 —— 配置信息请参阅该工具文档。

uv 仅支持以子进程模式使用 keyring 包。keyring 可执行文件必须在 PATH 中,也就是全局安装或在当前激活环境中安装。keyring CLI 要求 URL 中包含用户名,且必须是 VssSessionToken。

1
2
3
4
5
6
7
8
# 从公共 PyPI 预安装 keyring 与 Artifacts 插件
uv tool install keyring --with artifacts-keyring

# 启用 keyring 身份验证
export UV_KEYRING_PROVIDER=subprocess

# 设置该索引的用户名
export UV_INDEX_PRIVATE_REGISTRY_USERNAME=VssSessionToken

注意

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

同样,索引的用户名也可以直接写在索引 URL 中。

发布包

如果你还想把自己的包发布到 Azure Artifacts,可以按构建和发布指南中所述使用 uv publish。

首先,为目标索引添加 publish-url。例如:

1
2
3
4
5
# pyproject.toml
[[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/"

然后配置凭据(如果未使用 keyring):

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

并发布包:

1
$ uv publish --index private-registry

如果不想把 publish-url 添加到项目,也可以设置 UV_PUBLISH_URL 后使用 uv publish:

1
2
$ export UV_PUBLISH_URL=https://pkgs.dev.azure.com/<ORGANIZATION>/<PROJECT>/_packaging/<FEED>/pypi/upload/
$ uv publish

注意这种方式并不理想,因为 uv 在上传产物之前无法检查该包是否已经发布。

最后修改 September 25, 2026: 更新 (221c74c33)