2.7.12 与 AWS CodeArtifact 配合使用
原文链接: https://docs.astral.sh/uv/guides/integration/aws/
2.7.12 与 AWS CodeArtifact 配合使用
uv 可以从 AWS CodeArtifact 安装包,既可以使用访问令牌,也可以使用 keyring 包。
注意
本指南假设 awscli 已安装并完成身份验证。
索引可以这样声明:
1
2
3
4
| # 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 生成令牌:
1
2
3
4
5
6
7
| export AWS_CODEARTIFACT_TOKEN="$(
aws codeartifact get-authorization-token \
--domain <DOMAIN> \
--domain-owner <ACCOUNT_ID> \
--query authorizationToken \
--output text
)"
|
注意
你可能需要传入额外参数才能正确生成令牌(例如 --region),这里只是一个基本示例。
然后这样为该索引设置凭据:
1
2
| export UV_INDEX_PRIVATE_REGISTRY_USERNAME=aws
export UV_INDEX_PRIVATE_REGISTRY_PASSWORD="$AWS_CODEARTIFACT_TOKEN"
|
注意
PRIVATE_REGISTRY 应与你在 pyproject.toml 中定义的索引名称一致。
使用 keyring 和 keyrings.codeartifact 进行身份验证
你也可以使用 keyring 包配合 keyrings.codeartifact 插件向 Artifact Registry 进行身份验证。由于这两个包是向 Artifact Registry 进行身份验证所必需的,它们必须先从 Artifact Registry 之外的来源预安装。
keyrings.codeartifact 插件封装了 boto3,用于生成短期访问令牌、把它们安全地存入系统 keyring,并在过期时刷新。
uv 仅支持以子进程模式使用 keyring 包。keyring 可执行文件必须在 PATH 中,也就是全局安装或在当前激活环境中安装。keyring CLI 要求 URL 中包含用户名,且必须是 aws。
1
2
3
4
5
6
7
8
| # 从公共 PyPI 预安装 keyring 与 AWS CodeArtifact 插件
uv tool install keyring --with keyrings.codeartifact
# 启用 keyring 身份验证
export UV_KEYRING_PROVIDER=subprocess
# 设置该索引的用户名
export UV_INDEX_PRIVATE_REGISTRY_USERNAME=aws
|
注意
可以使用 tool.uv.keyring-provider 设置在 uv.toml 或 pyproject.toml 中启用 keyring。
同样,索引的用户名也可以直接写在索引 URL 中。
发布包
如果你还想把自己的包发布到 AWS CodeArtifact,可以按构建和发布指南中所述使用 uv publish。
首先,为目标索引添加 publish-url。例如:
1
2
3
4
5
| # pyproject.toml
[[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>/"
|
然后配置凭据(如果未使用 keyring):
1
2
| $ export UV_PUBLISH_USERNAME=aws
$ export UV_PUBLISH_PASSWORD="$AWS_CODEARTIFACT_TOKEN"
|
并发布包:
1
| $ uv publish --index private-registry
|
如果不想把 publish-url 添加到项目,也可以设置 UV_PUBLISH_URL 后使用 uv publish:
1
2
| $ export UV_PUBLISH_URL=https://<DOMAIN>-<ACCOUNT_ID>.d.codeartifact.<REGION>.amazonaws.com/pypi/<REPOSITORY>/
$ uv publish
|
注意这种方式并不理想,因为 uv 在上传产物之前无法检查该包是否已经发布。