

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# PythonでCodeArtifactを使う
<a name="using-python"></a>

以下のトピックでは、`pip`、Python パッケージマネージャー、そして `twine`、Python パッケージパブリッシングユーティリティを CodeArtifact で使う方法を解説します。

**Topics**
+ [CodeArtifact で pip を設定して使用する](python-configure-pip.md)
+ [CodeArtifact で twine を設定して使用する](python-configure-twine.md)
+ [Python パッケージ名の正規化](python-name-normalization.md)
+ [Python の互換性](python-compatibility.md)
+ [アップストリームと外部接続からの Python パッケージのリクエスト](python-upstream-external-connections-request.md)

# CodeArtifact で pip を設定して使用する
<a name="python-configure-pip"></a>

[pip](https://pypi.org/project/pip/) は Python パッケージのパッケージインストーラーです。pip を使用して CodeArtifact リポジトリから Python パッケージをインストールするには、まず CodeArtifact リポジトリの情報と認証情報を使用して pip クライアントを設定する必要があります。

pip は Python パッケージのインストールにのみ使用できます。Python パッケージを公開するには、[twine](https://pypi.org/project/twine/) を使用します。詳細については、「[CodeArtifact で twine を設定して使用する](python-configure-twine.md)」を参照してください。

## `login` コマンドで pip を設定します。
<a name="python-configure-pip-login"></a>

まず、「」の説明に従って AWS CLI、 で使用する AWS 認証情報を設定します[CodeArtifact の開始方法](getting-started.md)。次に、CodeArtifact `login` コマンドを使用して認証情報を取得し、この認証情報を使用して `pip` を設定します。

**注記**  
所有しているドメインのリポジトリにアクセスする場合、`--domain-owner`を含める必要はありません。詳細については、「[クロスアカウントドメイン](domain-overview.md#domain-overview-cross-account)」を参照してください。

pipを設定するには、次のコマンドを実行します。

```
aws codeartifact login --tool pip --domain my_domain --domain-owner 111122223333 --repository my_repo
```

 `login` は、 AWS 認証情報を使用して CodeArtifact から認可トークンを取得します。`login` コマンドは、`~/.config/pip/pip.conf` を編集して `--repository` オプションで指定されたリポジトリに `index-url` を設定することで、`pip` を CodeArtifact で使用できるようにします。

`login` を呼び出した後のデフォルトの認可時間は 12 時間であり、トークンを定期的に更新するには、`login` を呼び出す必要があります。`login` コマンドで作成される認可トークンの詳細については、「[`login`コマンドで作成されたトークン](tokens-authentication.md#auth-token-login)」を参照してください。

## ログインコマンドを使用せずにpipを設定する
<a name="python-configure-without-pip"></a>

 `pip`の設定に`login`コマンドを使用できない場合、`pip config`が使用できます。

1.  AWS CLI を使用して、新しい認可トークンを取得します。
**注記**  
所有しているドメインのリポジトリにアクセスする場合、`--domain-owner`を含める必要はありません。詳細については、「[クロスアカウントドメイン](domain-overview.md#domain-overview-cross-account)」を参照してください。

   ```
   CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text`
   ```

1. `pip config`を使用して CodeArtifactレジストリ URL と資格情報を設定します。以下のコマンドは、現在の環境設定ファイルのみを更新します。システム全体の設定ファイルを更新するには、`site` を `global` に置き換えます。

   ```
   pip config set site.index-url https://aws:$CODEARTIFACT_AUTH_TOKEN@my_domain-111122223333.d.codeartifact.region.amazonaws.com/pypi/my_repo/simple/
   ```
**注記**  
デュアルスタックエンドポイントを使用するには、`codeartifact.region.on.aws` エンドポイントを使用してください。

**重要**  
レジストリURLは、スラッシュ (/) で終わる必要があります。そうでないと、リポジトリに接続することはできません。

**pip 設定ファイルの例**

CodeArtifactのレジストリURLと資格情報を設定した後の`pip.conf`ファイルの例を以下に示します。

```
[global]
index-url = https://aws:eyJ2ZX...@my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/pypi/my_repo/simple/
```

## pipを実行する
<a name="python-run-pip"></a>

`pip`コマンドを実行するには、CodeArtifactで`pip`を設定しなくてはなりません。詳細については、次のドキュメントを参照してください。

1. [AWS CodeArtifact でのセットアップ](get-set-up-for-codeartifact.md) セクションの手順に従って、 AWS アカウント、ツール、アクセス許可を設定します。

1. [CodeArtifact で twine を設定して使用する](python-configure-twine.md)の手順に従って、`twine`を設定します。

パッケージが、リポジトリまたはそのアップストリームリポジトリの1つに存在する場合、`pip install` でインストールすることができます。例えば、`requests`パッケージをインストールするには、次のコマンドを使用します。

```
pip install requests
```

CodeArtifactリポジトリではなく、[https://pypi.org](https://pypi.org) からのパッケージのインストールに一時的に戻すには、`-i` オプションを使います。

```
pip install -i https://pypi.org/simple requests
```

# CodeArtifact で twine を設定して使用する
<a name="python-configure-twine"></a>

[twine](https://pypi.org/project/twine/) は Python パッケージのパッケージ公開ユーティリティです。twine を使用して CodeArtifact リポジトリに Python パッケージを公開するには、まず CodeArtifact リポジトリの情報と認証情報を使用して twine を設定する必要があります。

twine は Python パッケージの公開にのみ使用できます。Python パッケージをインストールするには、[pip](https://pypi.org/project/pip/) を使用します。詳細については、「[CodeArtifact で pip を設定して使用する](python-configure-pip.md)」を参照してください。

## `login` コマンドを使用して twine を設定する
<a name="python-configure-twine-login"></a>

まず、「」の説明に従って AWS CLI、 で使用する AWS 認証情報を設定します[CodeArtifact の開始方法](getting-started.md)。次に、CodeArtifact `login` コマンドを使用して認証情報を取得し、この認証情報を使用して twine を設定します。

**注記**  
所有しているドメインのリポジトリにアクセスする場合、`--domain-owner`を含める必要はありません。詳細については、「[クロスアカウントドメイン](domain-overview.md#domain-overview-cross-account)」を参照してください。

twineを設定するには、次のコマンドを実行します。

```
aws codeartifact login --tool twine --domain my_domain --domain-owner 111122223333 --repository my_repo
```

 `login` は、 AWS 認証情報を使用して CodeArtifact から認可トークンを取得します。`login` コマンドは、`~/.pypirc` を編集し認証情報を含む `--repository` オプションで指定されたリポジトリを追加することで、twine を CodeArtifact で使用できるように設定します。

`login` を呼び出した後のデフォルトの認可時間は 12 時間であり、トークンを定期的に更新するには、`login` を呼び出す必要があります。`login` コマンドで作成される認可トークンの詳細については、「[`login`コマンドで作成されたトークン](tokens-authentication.md#auth-token-login)」を参照してください。

## `login` コマンドを使用せずに twine を設定する
<a name="python-configure-twine-without-login"></a>

 `login` コマンドが twine の設定に使用できない場合、`~/.pypirc` ファイルまたは環境変数を使用することができます。`~/.pypirc`ファイル を使用するためには、次のエントリを追加します。パスワードは、`get-authorization-token`API によって取得された認証トークンである必要があります。

```
[distutils]
index-servers =
 codeartifact
[codeartifact]
repository = https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/pypi/my_repo/
password = auth-token
username = aws
```

**注記**  
デュアルスタックエンドポイントを使用するには、`codeartifact.region.on.aws` エンドポイントを使用してください。

環境変数を使用するには、以下の操作を実行します。

**注記**  
所有しているドメインのリポジトリにアクセスする場合、`--domain-owner`を含める必要はありません 詳細については、「[クロスアカウントドメイン](domain-overview.md#domain-overview-cross-account)」を参照してください。

```
export TWINE_USERNAME=aws
export TWINE_PASSWORD=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text`
export TWINE_REPOSITORY_URL=`aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format pypi --query repositoryEndpoint --output text`
```

## twineを実行する
<a name="python-run-twine"></a>

twine を使って Python パッケージアセットを公開するには、まず CodeArtifact の権限とリソースを設定する必要があります。

1. [AWS CodeArtifact でのセットアップ](get-set-up-for-codeartifact.md) セクションの手順に従って、 AWS アカウント、ツール、アクセス許可を設定します。

1. 「[`login` コマンドを使用して twine を設定する](#python-configure-twine-login)」または「[`login` コマンドを使用せずに twine を設定する](#python-configure-twine-without-login)」の手順に従って twine を設定します。

twine の設定後、`twine` コマンドを実行することができます。Pythonパッケージアセットを公開するには、次のコマンドを使用します。

```
twine upload --repository codeartifact mypackage-1.0.tgz
```

Pythonアプリケーションのビルドとパッケージ化の方法については、Pythonパッケージングオーソリティのウェブサイトの[配布アーカイブの生成 (Generating Distribution Archives)](https://packaging.python.org/tutorials/packaging-projects/#generating-distribution-archives)を参照してください。

# Python パッケージ名の正規化
<a name="python-name-normalization"></a>

CodeArtifact は、パッケージ名を保存する前に正規化します。つまり、CodeArtifact のパッケージ名は、パッケージが公開されたときに提供されたものとは異なる場合があります。

Python パッケージの場合、パッケージ名を正規化すると、パッケージ名は小文字になり、すべての `.`、`-`、`_` は 1 つの `-` に置き換えられます。そのため、`pigeon_cli` と `pigeon.cli` のパッケージ名は正規化され、`pigeon-cli` として保存されます。pip と twine では正規化されていない名前を使用できますが、CodeArtifact CLI または API リクエスト (`list-package-versions` など) および ARN では、正規化された名前を使用する必要があります。Python パッケージ名の正規化の詳細については、Python のドキュメントの「[PEP 503](https://www.python.org/dev/peps/pep-0503/#normalized-names)」を参照してください。

# Python の互換性
<a name="python-compatibility"></a>

CodeArtifactでは PyPIの`XML-RPC`、または `JSON`API はサポートしていません。

CodeArtifactは PyPIの`Legacy`API をサポートしています。ただし`simple`API はその限りではありません。CodeArtifact は `/simple/` API エンドポイントをサポートしていませんが、`/simple/<project>/` エンドポイントはサポートしています。

詳細については、PythonパッケージングオーソリティのGitHubリポジトリの以下を参照してください。
+ [XML-RPC API](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/xml-rpc.rst)
+ [JSON API](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/json.rst)
+ [Legacy API](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/legacy.rst)

## pipコマンドサポート
<a name="pip-command-support"></a>

以下のセクションでは、CodeArtifactリポジトリでサポートされているpipコマンドと、サポートされていない特定のコマンドについてまとめます。

**Topics**
+ [リポジトリとインタラクトするサポートされたコマンド](#supported-pip-commands-that-interact-with-a-repository)
+ [サポートされているクライアント側コマンド](#supported-pip-client-side-commands)

### リポジトリとインタラクトするサポートされたコマンド
<a name="supported-pip-commands-that-interact-with-a-repository"></a>

このセクションでは、`pip`クライアントが設定されたレジストリに1つかそれ以上のリクエストを行う`pip`コマンドをリストアップします。これらのコマンドは、CodeArtifactリポジトリに対して呼び出されたときに正しく機能することが確認されています。


****  

| コマンド | 説明 | 
| --- | --- | 
|   [install](https://pip.pypa.io/en/stable/reference/pip_install/) (インストール)   |  パッケージのインストール  | 
|   [download](https://pip.pypa.io/en/stable/reference/pip_download/)   |  パッケージのダウンロード  | 

CodeArtifactは`pip search`を実装していません。`pip`を CodeArtifactのリポジトリで設定した場合、`pip search`を実行すると[PyPI](https://pypi.org/)からパッケージを検索して表示します。

### サポートされているクライアント側コマンド
<a name="supported-pip-client-side-commands"></a>

これらのコマンドはリポジトリとの直接的なやりとりを必要としないため、CodeArtifactはそのサポートのために何もする必要はありません。


****  

| コマンド | 説明 | 
| --- | --- | 
|   [uninstall](https://pip.pypa.io/en/stable/reference/pip_uninstall/) (アンインストール)   |  パッケージをアンインストールする  | 
|   [フリーズ](https://pip.pypa.io/en/stable/reference/pip_freeze/)   |  インストール済みパッケージを要件形式で出力します。  | 
|   [list](https://pip.pypa.io/en/stable/reference/pip_list/)   |  インストールされているパッケージを一覧表示します。  | 
|   [show](https://pip.pypa.io/en/stable/reference/pip_show/)   |  インストールされたパッケージに関する情報を表示します。  | 
|   [チェック](https://pip.pypa.io/en/stable/reference/pip_check/)   |  インストールされているパッケージに互換性のある依存関係があることを確認します。  | 
|   [config](https://pip.pypa.io/en/stable/reference/pip_config/)   |  ローカルおよびグローバル設定を管理します。  | 
|   [ホイール](https://pip.pypa.io/en/stable/reference/pip_wheel/)   |  要件からホイールを構築します。  | 
|   [ハッシュ](https://pip.pypa.io/en/stable/reference/pip_hash/)   |  パッケージアーカイブのハッシュを計算します。  | 
|   [完了](https://pip.pypa.io/en/stable/user_guide/#command-completion)   |  コマンド補完に役立ちます。  | 
|   [debug](https://pip.pypa.io/en/stable/reference/pip_debug/)   |  デバッグ時に便利な情報を表示します。  | 
|  help  |  コマンドのヘルプを表示します。  | 

# アップストリームと外部接続からの Python パッケージのリクエスト
<a name="python-upstream-external-connections-request"></a>

Python パッケージバージョンを [pypi.org](https://pypi.org/) からインポートすると、CodeArtifact はそのパッケージバージョン内のすべてのアセットをインポートします。ほとんどの Python パッケージには少数のアセットが含まれていますが、複数のハードウェアアーキテクチャと Python インタープリタをサポートするために 100 を超えるアセットを含むパッケージもあります。

既存のパッケージバージョン用の新しいアセットは pypi.org で頻繁に公開されています。例えば、Python の新しいバージョンがリリースされる際に、新しいアセットを公開するいくつかのプロジェクトがあります。`pip install` を使用して、Python パッケージを CodeArtifact からインストールすると、CodeArtifact リポジトリに保持されているパッケージバージョンが、pypi.org からの最新のアセットセットを反映するように更新されます。

同様に、現在の CodeArtifact リポジトリに存在しない、アップストリームの CodeArtifact リポジトリにあるパッケージバージョン用の新しいアセットが使用できる場合、それらは `pip install` の実行時に現在のリポジトリに保持されます。

## 削除されたパッケージバージョン
<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/) でパッケージバージョンが削除されているかどうかを確認するには、`https://pypi.org/project/packageName/packageVersion/` でそのパッケージバージョンの pypi.org リストを確認してください。

### プライベートパッケージに yanked ステータスを設定する
<a name="yanked-private-packages"></a>

CodeArtifact は、CodeArtifact リポジトリに直接公開されたパッケージの削除されたメタデータの設定をサポートしていません。

## CodeArtifact がパッケージバージョンの最新の削除済みメタデータまたはアセットを取得しないのはなぜですか?
<a name="no-yanked-metadata"></a>

通常、CodeArtifact は Python パッケージのバージョンが CodeArtifact リポジトリから取得されたときに、削除されたメタデータが [pypi.org](https://pypi.org/) 上の最新の値で更新されていることを確認します。さらに、パッケージバージョンのアセットのリストも、pypi.org とアップストリームの CodeArtifact リポジトリで最新のセットにより、最新の状態に保たれます。これは、パッケージバージョンを初めてインストールし、CodeArtifact が pypi.org から CodeCodeArtifact リポジトリにインポートした場合にも、以前にパッケージをインストールした場合にも当てはまります。ただし、pip などのパッケージマネージャークライアントが、削除された最新のメタデータを pypi.org またはアップストリームレポジトリから取得しない場合があります。代わりに、CodeArtifact はリポジトリに既に保存されているデータを返します。このセクションでは、これが発生する 3 つのケースについて説明します。

**アップストリーム設定:** [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 からパッケージに対して更新されません。例えば、Web ブラウザーを使用して `torch 2.0.1` などのパッケージバージョン `torch-2.0.1-cp311-none-macosx_11_0_arm64.whl` からアセットをダウンロードし、twine を `torch 2.0.1` として使用して CodeArtifact リポジトリに公開する場合です。CodeArtifact は、pypi.org またはアップストリームレポジトリへの外部接続からではなく、リポジトリへの直接公開によってパッケージバージョンがドメインに入ったことを追跡します。この場合、CodeArtifact は削除されたメタデータをアップストリームのリポジトリまたは pypi.org と同期しません。これは、アップストリームリポジトリに `torch 2.0.1` を公開する場合も同様です。パッケージバージョンがあると、削除されたメタデータとアセットがアップストリームグラフの下位にあるリポジトリに伝播されません。