跳转至

AWS CodeArtifact

uv 可以从 AWS CodeArtifact 安装包,方式有两种:使用访问令牌(access token),或使用 keyring 包。

Note

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

Note

你可能需要传递额外参数(如 --region)才能正确生成令牌,以上仅为基本示例。

然后为索引设置凭据:

export UV_INDEX_PRIVATE_REGISTRY_USERNAME=aws
export UV_INDEX_PRIVATE_REGISTRY_PASSWORD="$AWS_CODEARTIFACT_TOKEN"

Note

PRIVATE_REGISTRY 应与你在 pyproject.toml 中定义的索引名称一致。

使用 keyringkeyrings.codeartifact 进行身份验证

你也可以使用 keyring 包及其 keyrings.codeartifact 插件 对 Artifact Registry 进行身份验证。由于这两个包是向 Artifact Registry 认证所必需的,因此必须从 Artifact Registry 以外的源预先安装。

keyrings.codeartifact 插件封装了 boto3,用于生成短期访问令牌,将其安全存储在系统密钥环(keyring)中,并在令牌过期时自动刷新。

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

Note

tool.uv.keyring-provider 设置可用于在 uv.tomlpyproject.toml 中启用 keyring。

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

发布包

如果你还想将自己的包发布到 AWS CodeArtifact,可以使用 uv publish,如 构建与发布指南 中所述。

首先,为你想要发布包的索引添加 publish-url。例如:

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):

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 无法检查该包是否已发布。