管理 Python 软件包

本页介绍了如何添加、查看和删除 Python 软件包和软件包版本。

准备工作

  1. 安装初始化 Google Cloud CLI。

    您需要使用 Google Cloud CLI 354.0.0 或更高版本才能运行 Python 代码库的命令。您可以使用以下命令检查版本:

    gcloud version
    
  2. 如果目标代码库不存在,请创建新的 Python 软件包代码库

  3. 验证是否已安装 Python 3。如需了解安装说明,请参阅Google Cloud 关于设置 Python 的教程

  4. (可选)为 gcloud 命令配置默认值

  5. 如果您使用 gcloud 凭据搭配密钥串身份验证,请使用您的用户账号或服务账号登录 Google Cloud CLI。

所需的角色

如需获得管理软件包所需的权限,请让管理员向您授予代码库的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

添加软件包

代码库模式:标准

构建 Python 项目时,分发文件会保存在项目的 dist 子目录中。然后,您可以使用 Twine 将软件包上传到标准代码库。

我们建议您在打包时遵循以下最佳实践:

  • 为私有软件包使用唯一名称,使其与 pypi.org 上的软件包名称不匹配,尤其是在您的 pip 配置包含多个软件包索引的情况下。
  • 请使用 PEP 440 中的版本标识符规范为软件包版本号。默认情况下,pip 仅安装稳定版本。它使用版本标识符规范来区分稳定版和预发布版,并解析要安装的版本的所有要求

如需添加软件包,请执行以下操作:

  1. 安装 Twine

    pip install twine
    
  2. 切换到您的 Python 项目目录。

  3. 将项目 dist 子目录中的分发文件上传到代码库。运行以下命令:

    twine upload dist/*
    

    您可以使用 --repository-url 标志指定特定代码库。

    twine upload --repository-url https://LOCATION-python.pkg.dev/PROJECT/REPOSITORY/ dist/*
    

查看软件包和版本

代码库模式:标准、远程

如需使用 Google Cloud 控制台或 gcloud 查看软件包和软件包版本,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中打开制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,点击相应代码库。

    软件包页面列出代码库中的软件包。

  3. 点击一个软件包以查看它的版本。

gcloud

如需列出代码库中的软件包,请运行以下命令:

gcloud artifacts packages list [--repository=REPOSITORY] [--location=LOCATION]

替换以下内容:

  • REPOSITORY 是代码库的名称。如果您配置了默认代码库,则可以省略此标志以使用默认值。
  • LOCATION 是代码库的单区域或多区域位置。 如果您配置了默认位置,则可以省略此标志以使用默认值。

如需查看软件包的版本,请运行以下命令:

gcloud artifacts versions list --package=PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION]

替换以下内容:

  • PACKAGE 是软件包的 ID 或软件包的完全限定标识符。
  • REPOSITORY 是代码库的名称。如果您配置了默认代码库,则可以省略此标志以使用默认值。
  • LOCATION 是代码库的单区域或多区域位置。 使用此标志可查看特定位置中的代码库。 如果您配置了默认位置,则可以省略此标志以使用默认值。

对于远程仓库,返回的列表应包含所有直接和传递依赖项。

列出文件

代码库模式:标准、远程

您可以列出代码库中的文件、指定软件包的所有版本中的文件,或软件包的特定版本中的文件。

对于以下所有命令,您都可以通过向命令添加 --limit 标志来设置要返回的文件数量上限。

如需在配置默认值时列出默认项目、代码库和位置中的所有文件,请运行以下命令:

gcloud artifacts files list

如需列出指定项目、代码库和位置中的文件,请运行以下命令:

gcloud artifacts files list \
    --project=PROJECT \
    --repository=REPOSITORY \
    --location=LOCATION

如需列出特定软件包的所有版本的文件,请执行以下操作:

gcloud artifacts files list \
    --project=PROJECT \
    --repository=REPOSITORY \
    --location=LOCATION \
    --package=PACKAGE

如需列出特定软件包版本的文件,请运行以下命令:

gcloud artifacts files list \
    --project=PROJECT \
    --repository=REPOSITORY \
    --location=LOCATION \
    --package=PACKAGE \
    --version=VERSION

替换以下值:

  • LOCATION:代码库的单区域或多区域位置
  • PROJECT:您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
  • REPOSITORY:存储了映像的代码库的名称。
  • PACKAGE:软件包的名称。
  • VERSION:软件包的版本。

示例

请考虑以下软件包信息:

  • 项目:my-project
  • 代码库:my-repo
  • 代码库位置:us-west1
  • 文件包:my-app

以下命令会列出默认项目中位置 us-west1 的代码库 my-repo 中的所有文件:

gcloud artifacts files list \
    --location=us-west1 \
    --repository=my-repo
以下命令会列出软件包版本 1.0 中的文件。

gcloud artifacts files list \
    --project=my-project \
    --location=us-west1 \
    --repository=my-repo \
    --package=my-app \
    --version=1.0

安装软件包

代码库模式:标准、远程、虚拟

使用 pip 命令安装软件包。

如需安装软件包的最新稳定版,请运行以下命令:

pip install PACKAGE

对于标准代码库,您可以直接从代码库下载软件包。

对于远程代码库,您可以下载软件包及其依赖项的缓存副本。如果不存在缓存的副本,远程代码库会从上游源代码下载该软件包并将其缓存,然后再将其提供给您。您可以查看代码库中的软件包列表,验证远程代码库是否从上游源代码检索了软件包。

对于虚拟代码库,Artifact Registry 会搜索上游代码库以查找请求的软件包。

  • 如果缓存副本不存在,上游远程仓库将下载并缓存请求的软件包。虚拟代码库仅提供请求的软件包,不会存储这些软件包。
  • 如果您请求的版本在多个上游代码库中都有,Artifact Registry 会根据为虚拟代码库配置的优先级设置选择要使用的上游代码库。

例如,假设某个虚拟代码库的上游代码库具有以下优先级设置:

  • main-repo:优先级设置为 100
  • secondary-repo1:优先级设置为 80
  • secondary-repo2:优先级设置为 80
  • test-repo:优先级设置为 20

main-repo 具有最高优先级值,因此虚拟仓库始终会先搜索它。

secondary-repo1secondary-repo2 的优先级均设为 80。如果请求的软件包未在 main-repo 中找到,Artifact Registry 接下来会搜索这些代码库。由于它们具有相同的优先级值,因此如果这两个仓库中都提供该版本,Artifact Registry 可以选择从任一仓库中提供该软件包。

test-repo 具有最低优先级值,如果其他上游代码库都没有存储工件,则会提供存储的工件。

其他信息

默认情况下,pip 会安装软件包的稳定版本,并忽略预发布版本。PEP 440 定义了 Python 版本标识符规范,供 pip 用户解析版本号,包括预发布版本

如需在 pip 搜索要安装的软件包时包含预发布版本,请将 --pre 标志添加到您的命令中。

pip install --pre PACKAGE

如需指定所需的版本或版本范围,请添加要求说明符。您可以直接在命令中添加版本要求,也可以使用要求文件

例如,以下命令指定 my-package 的最低版本是开发版本 1.0.dev0

pip install --pre my-package>=1.0.dev0

稳定版被视为比预发布版更高级,因此如果版本 1.0 位于代码库中,pip 会选择版本 1.0,而不是预发布版本。

如果您未指定代码库,则 pip.conf 中的 pip 配置将决定 pip 搜索软件包的方式。

  • 如果您使用 index-url 设置配置了 Artifact Registry 代码库,并且未配置任何其他软件包索引,则 pip 只会在您的 Artifact Registry 代码库中搜索软件包。
  • 如果您使用的是虚拟代码库,当多个上游代码库都包含所请求的软件包版本时,Artifact Registry 会使用上游政策中配置的优先级来选择软件包。如果包含该软件包的两个仓库具有相同的优先级,Artifact Registry 会从任一仓库中提供该软件包。
  • 如果您使用 extra-index-url 设置配置了 pip,或者配置了多个软件包索引,pip 会搜索 pypi.org 和任何其他配置的软件包索引,并选择最新版本的软件包。

您可以在要求文件中替换 index-urlextra-index-url 设置。您还可以在 pip 命令中使用这些设置的标志。例如,以下命令会使用 Artifact Registry 制品库替换 index-url

pip install --index-url https://us-east1-python.pkg.dev/my-project/python-repo/simple/ my-package

如需详细了解如何安装软件包,请参阅 Python 打包文档

删除软件包和版本

代码库模式:标准、远程

您可以删除软件包及其所有版本,也可以删除特定版本。

  • 删除文件包后,您无法撤消此操作。
  • 对于远程代码库,系统只会删除软件包的缓存副本。上游来源不受影响。如果您删除了缓存的软件包,那么当代码库下次收到针对同一软件包版本的请求时,Artifact Registry 会再次下载并缓存该软件包。

在删除软件包或软件包版本之前,请确认您已在其中告知或解决任何重要依赖项。

如需删除软件包,请按如下所述操作:

控制台

  1. 在 Google Cloud 控制台中打开制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,点击相应代码库。

    软件包页面列出代码库中的软件包。

  3. 选择要删除的软件包。

  4. 点击删除

  5. 在确认对话框中,点击删除

gcloud

运行以下命令:

gcloud artifacts packages delete PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION] [--async]

替换以下内容:

  • PACKAGE 是代码库中的软件包名称。
  • REPOSITORY 是代码库的名称。如果您配置了默认代码库,则可以省略此标志以使用默认值。
  • LOCATION 是代码库的单区域或多区域位置。 使用此标志可查看特定位置中的代码库。如果您配置了默认位置,则可以省略此标志以使用默认值。

--async 标志会导致命令立即返回,而无需等待正在进行的操作完成。

如需删除软件包的版本,请按如下所述操作:

控制台

  1. 在 Google Cloud 控制台中打开制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,点击相应代码库。

    软件包页面列出代码库中的软件包。

  3. 点击一个软件包以查看它的版本。

  4. 选择您要删除的版本。

  5. 点击删除

  6. 在确认对话框中,点击删除

gcloud

运行以下命令:

gcloud artifacts versions delete VERSION \
    --package=PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION] \
    [--async]

替换以下内容:

  • VERSION 是要删除的版本的名称。
  • PACKAGE 是代码库中的软件包名称。
  • REPOSITORY 是代码库的名称。如果您配置了默认代码库,则可以省略此标志以使用默认值。
  • LOCATION 是代码库的单区域或多区域位置。 使用此标志可查看特定位置中的代码库。如果您配置了默认位置,则可以省略此标志以使用默认值。

--async 标志会导致命令立即返回,而无需等待正在进行的操作完成。

后续步骤