

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 从上游和外部连接请求 Python 程序包
<a name="python-upstream-external-connections-request"></a>

从 pyp [i.org](https://pypi.org/) 导入 Python 包版本时， CodeArtifact 将导入该软件包版本中的所有资产。虽然大多数 Python 程序包都只包含少量资产，但有些程序包包含 100 多个资产，通常用于支持多种硬件架构和 Python 解释器。

将现有软件包版本的新资产发布到 pypi.org 是很常见的。例如，在发布新版本的 Python 时，一些项目会发布新资产。 CodeArtifact 使用安装 Python 包时`pip install`， CodeArtifact 存储库中保留的软件包版本会更新，以反映来自 pypi.org 的最新资源集。

同样，如果上游 CodeArtifact 存储库中的某个软件包版本有新的可用资源，而当前 CodeArtifact 存储库中不存在这些资产，`pip install`则在运行时它们将保留在当前存储库中。

## 已撤销的程序包版本
<a name="python-yanked-versions"></a>

pypi.org 中的某些程序包版本标记为*已撤销*，这会向程序包安装程序（例如 pip）表明，除非该版本是唯一与版本说明符匹配的版本（使用 `==` 或 `===`），否则不应安装该版本。有关更多信息，请参阅 [PEP\_592](https://peps.python.org/pep-0592/)。

如果中的软件包版本 CodeArtifact 最初是从外部连接获取到 [pypi.org](https://pypi.org/) 的，则当您从 CodeArtifact 存储库安装软件包版本时，请 CodeArtifact 确保从 pypi.org 中获取该软件包版本的已更新已提取元数据。

### 如何知道某个程序包版本是否已撤销
<a name="test-yanked-version"></a>

要检查软件包版本是否已被撤 CodeArtifact回，可以尝试使用`pip install {{packageName}}==={{packageVersion}}`进行安装。如果程序包版本已撤销，您会收到一条与以下内容类似的警告消息：

```
WARNING: The candidate selected for download or install is a yanked version
```

要查看程序包版本是否在 [pypi.org](https://pypi.org/) 中撤销，您可以访问该程序包版本的 pypi.org 列表，网址为 `https://pypi.org/project/{{packageName}}/{{packageVersion}}/`。

### 对私有程序包设置撤销状态
<a name="yanked-private-packages"></a>

CodeArtifact 不支持为直接发布到 CodeArtifact 存储库的包设置已取消的元数据。

## 为什么 CodeArtifact 不获取软件包版本的最新已撤回的元数据或资产？
<a name="no-yanked-metadata"></a>

[通常， CodeArtifact 可以确保从 CodeArtifact 存储库中获取 Python 包版本时，提取的元数据是最新的，在 pypi.org 上具有最新值。](https://pypi.org/)此外，软件包版本中的资产列表还会使用 pypi.org 和任何上游存储库中的最新设置进行更新。 CodeArtifact 无论你是第一次安装软件包版本并将其从 pypi.org CodeArtifact 导入 CodeArtifact 存储库，还是之前安装过软件包，都是如此。但是，在某些情况下，包管理器客户端（例如 pip）不会从 pypi.org 或上游存储库中提取最新提取的元数据。相反， CodeArtifact 将返回已存储在存储库中的数据。本节说明了发生这种情况的三种方式：

**上游配置：**如果使用 [disassociate-external-connection](external-connection.md#removing-an-external-connection) 从存储库或其上游移除与 pypi.org 的外部连接，则不再从 pypi.org 刷新撤销元数据。同样，如果您移除上游存储库，则当前存储库中已移除的存储库和已删除存储库的上游资源将不再可用。如果您使用 CodeArtifact [包源控件来阻止提取特定软件包](package-origin-controls.md)的新版本，则情况也是如此，设置`upstream=BLOCK`将阻止刷新已提取的元数据。

**程序包版本状态：**如果您将程序包版本的状态设置为除 `Published` 或 `Unlisted` 之外的任何其它状态，则不会刷新程序包版本的撤销元数据和资产。同样，如果您正在获取特定的软件包版本（比如`torch 2.0.1`），并且上游存储库中存在相同的软件包版本，其状态不是 o `Published` r`Unlisted`，则这也会阻止从上游存储库中提取的元数据和资产传播到当前存储库。这是因为其它程序包版本状态表明这些版本不打算再在任何存储库中使用。

**直接发布：**如果您将特定的软件包版本直接发布到 CodeArtifact 存储库中，这将防止从其上游存储库和 pypi.org 中删除软件包版本的元数据和资产刷新。例如，假设您使用网络浏览器从软件包版本`torch 2.0.1`下载资产（例如）`torch-2.0.1-cp311-none-macosx_11_0_arm64.whl`，然后使用 twine as 将其发布到 CodeArtifact 存储库。`torch 2.0.1` CodeArtifact 跟踪软件包版本是通过直接发布到您的存储库而不是从 pypi.org 或上游存储库的外部连接进入域名的。在这种情况下， CodeArtifact 不会使撤出的元数据与上游存储库或 pypi.org 保持同步。如果您将 `torch 2.0.1` 发布到上游存储库，情况也是如此，因为存在程序包版本，所以会阻止将撤销元数据和资产传播到上游图更下方的存储库。