

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從上游和外部連線請求 Python 套件
<a name="python-upstream-external-connections-request"></a>

從 [pypi.org](https://pypi.org/) 匯入 Python 套件版本時，CodeArtifact 會匯入該套件版本中的所有資產。雖然大多數 Python 套件都包含少量資產，但有些套件包含超過 100 個資產，通常支援多個硬體架構和 Python 解譯器。

對於現有的套件版本，新資產通常會發佈到 pypi.org。例如，有些專案會在發行新版本的 Python 時發佈新資產。從 CodeArtifact 安裝 Python 套件並搭配 時`pip install`，會更新 CodeArtifact 儲存庫中保留的套件版本，以反映來自 pypi.org：// 的最新資產集。

同樣地，如果上游 CodeArtifact 儲存庫中的套件版本沒有新的資產，則在`pip install`執行時，這些資產會保留在目前的 CodeArtifact 儲存庫中。

## Yanked 套件版本
<a name="python-yanked-versions"></a>

部分 pypi.org 中的套件版本標示為 *yanked*，它會與套件安裝程式 （例如 pip) 通訊，除非版本是唯一符合版本指標 （使用 `==`或 `===`) 的版本。如需詳細資訊，請參閱 [PEP\$1592](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/)：//www.microsoft.com/microsoft.com/microsoft.microsoft.com/microsoft.com/microsoft.microsoft.com/microsoft.microsoft.microsoft.com/microsoft.microsoft.microsoft.microsoft.microsoft.com/soft.microsoft.microsoft.micro；若要查看套件版本的 pypi.org`https://pypi.org/project/packageName/packageVersion/`.com/

### 在私有套件上設定偏擺狀態
<a name="yanked-private-packages"></a>

CodeArtifact 不支援為直接發佈至 CodeArtifact 儲存庫的套件設定偏擺中繼資料。

## 為什麼 CodeArtifact 未擷取套件版本的最新偏擺中繼資料或資產？
<a name="no-yanked-metadata"></a>

通常，CodeArtifact 可確保從 CodeArtifact 儲存庫擷取 Python 套件版本時，偏擺的中繼資料會up-to-date，且具有 [pypi.org](https://pypi.org/)：//www. 上的最新值。此外，套件版本中的資產清單也會以 https：// pypi.org 和任何上游 CodeArtifact 儲存庫上的最新設定來保持最新狀態。無論您是第一次安裝套件版本，而且 CodeArtifact 從 pypi.org 將其匯入 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`)，且上游儲存庫中存在狀態不是 `Published`或 的相同套件版本`Unlisted`，這也會封鎖上游儲存庫到目前儲存庫的偏擺中繼資料和資產傳播。這是因為其他套件版本狀態表示版本不再在任何儲存庫中使用。

**直接發佈：**如果您將特定套件版本直接發佈至 CodeArtifact 儲存庫，這將防止套件版本的受阻中繼資料和資產重新整理從其上游儲存庫和 pypi.org 進行。例如，假設您從套件版本 下載資產`torch 2.0.1`，例如 `torch-2.0.1-cp311-none-macosx_11_0_arm64.whl`，使用 Web 瀏覽器，然後使用 Twine 做為 將其發佈到您的 CodeArtifact 儲存庫`torch 2.0.1`。CodeArtifact 會透過直接發佈至您的儲存庫來追蹤套件版本是否進入網域，而不是從與 pypi.org 的外部連線或上游儲存庫。在此情況下，CodeArtifact 不會讓偏擺中繼資料與上游儲存庫或 pypi.org 保持同步。如果您發佈`torch 2.0.1`到上游儲存庫，也是如此 — 套件版本的存在會阻止將偏擺中繼資料和資產傳播到更深入上游圖形的儲存庫。