

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation CodeArtifact avec Python
<a name="using-python"></a>

Ces rubriques décrivent comment utiliser `pip` le gestionnaire de packages Python et `twine` l'utilitaire de publication de packages Python avec CodeArtifact.

**Topics**
+ [Configurer et utiliser pip avec CodeArtifact](python-configure-pip.md)
+ [Configurez et utilisez Twine avec CodeArtifact](python-configure-twine.md)
+ [Normalisation du nom des paquets Python](python-name-normalization.md)
+ [Compatibilité Python](python-compatibility.md)
+ [Demande de packages Python depuis des connexions en amont et externes](python-upstream-external-connections-request.md)

# Configurer et utiliser pip avec CodeArtifact
<a name="python-configure-pip"></a>

[pip](https://pypi.org/project/pip/) est l'installateur de packages pour les packages Python. Pour utiliser pip pour installer des packages Python à partir de votre CodeArtifact dépôt, vous devez d'abord configurer le client pip avec les informations et les informations d'identification de votre CodeArtifact référentiel.

pip ne peut être utilisé que pour installer des packages Python. Pour publier des packages Python, vous pouvez utiliser [twine](https://pypi.org/project/twine/). Pour de plus amples informations, veuillez consulter [Configurez et utilisez Twine avec CodeArtifact](python-configure-twine.md).

## Configurez pip avec la commande `login`
<a name="python-configure-pip-login"></a>

Tout d'abord, configurez vos AWS informations d'identification à utiliser avec le AWS CLI, comme décrit dans[Commencer avec CodeArtifact](getting-started.md). Utilisez ensuite la CodeArtifact `login` commande pour récupérer les informations d'identification et les configurer `pip` avec elles.

**Note**  
Si vous accédez à un référentiel dans un domaine qui vous appartient, vous n'avez pas besoin de l'inclure`--domain-owner`. Pour de plus amples informations, veuillez consulter [Domaines multi-comptes](domain-overview.md#domain-overview-cross-account).

Pour configurer pip, exécutez la commande suivante.

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

 `login`récupère un jeton d'autorisation à l' CodeArtifact aide de vos AWS informations d'identification. La `login` commande sera configurée `pip` pour être utilisée CodeArtifact en éditant `~/.config/pip/pip.conf` `index-url` pour définir le référentiel spécifié par l'`--repository`option.

La période d'autorisation par défaut après l'appel `login` est de 12 heures et `login` doit être appelée pour actualiser régulièrement le jeton. Pour plus d'informations sur le jeton d'autorisation créé avec la `login` commande, consultez[Jetons créés avec la `login` commande](tokens-authentication.md#auth-token-login).

## Configurer pip sans la commande de connexion
<a name="python-configure-without-pip"></a>

 Si vous ne pouvez pas utiliser la `login` commande pour configurer`pip`, vous pouvez utiliser`pip config`.

1. Utilisez le AWS CLI pour récupérer un nouveau jeton d'autorisation.
**Note**  
Si vous accédez à un référentiel dans un domaine qui vous appartient, il n'est pas nécessaire d'inclure le`--domain-owner`. Pour de plus amples informations, veuillez consulter [Domaines multi-comptes](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`À utiliser pour définir l'URL du CodeArtifact registre et les informations d'identification. La commande suivante ne mettra à jour que le fichier de configuration de l'environnement actuel. Pour mettre à jour le fichier de configuration à l'échelle du système, remplacez-le `site` par`global`.

   ```
   pip config set site.index-url https://aws:$CODEARTIFACT_AUTH_TOKEN@my_domain-111122223333.d.codeartifact.region.amazonaws.com/pypi/my_repo/simple/
   ```
**Note**  
Pour utiliser un point de terminaison à double pile, utilisez le `codeartifact.region.on.aws` point de terminaison.

**Important**  
L'URL du registre doit se terminer par une barre oblique (/). Dans le cas contraire, vous ne pourrez pas vous connecter au référentiel.

**Exemple de fichier de configuration pip**

Voici un exemple de `pip.conf` fichier après avoir défini l'URL du CodeArtifact registre et les informations d'identification.

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

## Exécutez pip
<a name="python-run-pip"></a>

Pour exécuter `pip` des commandes, vous devez configurer `pip` avec CodeArtifact. Pour plus d’informations, consultez la documentation suivante.

1. Suivez les étapes décrites dans la [Configuration avec AWS CodeArtifact](get-set-up-for-codeartifact.md) section pour configurer votre AWS compte, vos outils et vos autorisations.

1. Configurez `twine` en suivant les étapes décrites dans[Configurez et utilisez Twine avec CodeArtifact](python-configure-twine.md).

En supposant qu'un package soit présent dans votre dépôt ou dans l'un de ses référentiels en amont, vous pouvez l'installer avec`pip install`. Par exemple, utilisez la commande suivante pour installer le `requests` package.

```
pip install requests
```

Utilisez `-i` cette option pour revenir temporairement à l'installation de packages depuis [https://pypi.org](https://pypi.org) au lieu de votre CodeArtifact dépôt.

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

# Configurez et utilisez Twine avec CodeArtifact
<a name="python-configure-twine"></a>

[twine](https://pypi.org/project/twine/) est un utilitaire de publication de packages pour les packages Python. Pour utiliser twine pour publier des packages Python dans votre CodeArtifact dépôt, vous devez d'abord configurer twine avec les informations et les informations d'identification de votre CodeArtifact dépôt.

twine ne peut être utilisé que pour publier des packages Python. Pour installer des packages Python, vous pouvez utiliser [pip.](https://pypi.org/project/pip/) Pour de plus amples informations, veuillez consulter [Configurer et utiliser pip avec CodeArtifact](python-configure-pip.md).

## Configurez la ficelle avec la commande `login`
<a name="python-configure-twine-login"></a>

Tout d'abord, configurez vos AWS informations d'identification à utiliser avec le AWS CLI, comme décrit dans[Commencer avec CodeArtifact](getting-started.md). Utilisez ensuite la CodeArtifact `login` commande pour récupérer les informations d'identification et configurer Twine avec elles.

**Note**  
Si vous accédez à un référentiel dans un domaine qui vous appartient, vous n'avez pas besoin de l'inclure`--domain-owner`. Pour de plus amples informations, veuillez consulter [Domaines multi-comptes](domain-overview.md#domain-overview-cross-account).

Pour configurer Twine, exécutez la commande suivante.

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

 `login`récupère un jeton d'autorisation à l' CodeArtifact aide de vos AWS informations d'identification. La `login` commande configure la ficelle à utiliser CodeArtifact en modifiant `~/.pypirc` pour ajouter le référentiel spécifié par l'`--repository`option avec des informations d'identification.

La période d'autorisation par défaut après l'appel `login` est de 12 heures et `login` doit être appelée pour actualiser régulièrement le jeton. Pour plus d'informations sur le jeton d'autorisation créé avec la `login` commande, consultez[Jetons créés avec la `login` commande](tokens-authentication.md#auth-token-login).

## Configurer la ficelle sans la commande `login`
<a name="python-configure-twine-without-login"></a>

 Si vous ne pouvez pas utiliser la `login` commande pour configurer Twine, vous pouvez utiliser le `~/.pypirc` fichier ou les variables d'environnement. Pour utiliser le `~/.pypirc` fichier, ajoutez-y les entrées suivantes. Le mot de passe doit être un jeton d'authentification acquis par l'`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
```

**Note**  
Pour utiliser un point de terminaison à double pile, utilisez le `codeartifact.region.on.aws` point de terminaison.

Pour utiliser des variables d'environnement, procédez comme suit.

**Note**  
Si vous accédez à un référentiel dans un domaine qui vous appartient, il n'est pas nécessaire d'inclure le`--domain-owner`. Pour de plus amples informations, veuillez consulter [Domaines multi-comptes](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`
```

## Run twine
<a name="python-run-twine"></a>

Avant d'utiliser twine pour publier les actifs d'un package Python, vous devez d'abord configurer CodeArtifact les autorisations et les ressources.

1. Suivez les étapes décrites dans la [Configuration avec AWS CodeArtifact](get-set-up-for-codeartifact.md) section pour configurer votre AWS compte, vos outils et vos autorisations.

1. Configurez la ficelle en suivant les étapes décrites dans [Configurez la ficelle avec la commande `login`](#python-configure-twine-login) ou[Configurer la ficelle sans la commande `login`](#python-configure-twine-without-login).

Après avoir configuré Twine, vous pouvez exécuter des `twine` commandes. Utilisez la commande suivante pour publier les actifs d'un package Python.

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

Pour plus d'informations sur la création et le package de votre application Python, consultez la section [Génération d'archives de distribution](https://packaging.python.org/tutorials/packaging-projects/#generating-distribution-archives) sur le site Web de la Python Packaging Authority.

# Normalisation du nom des paquets Python
<a name="python-name-normalization"></a>

CodeArtifact normalise les noms de package avant de les stocker, ce qui signifie que les noms de package CodeArtifact peuvent être différents du nom fourni lors de la publication du package.

Pour les packages Python, lors de la normalisation, le nom du package est en minuscules et toutes les instances des caractères « `.``-`, » `_` sont remplacées par un seul caractère. `-` Ainsi, les noms des `pigeon_cli` packages `pigeon.cli` sont normalisés et stockés sous `pigeon-cli` la forme. Le nom non normalisé peut être utilisé par pip et twine, mais le nom normalisé doit être utilisé dans les requêtes CodeArtifact CLI ou API (telles que) et dans. `list-package-versions` ARNs Pour plus d'informations sur la normalisation des noms de paquets Python, consultez le [PEP 503](https://www.python.org/dev/peps/pep-0503/#normalized-names) dans la documentation Python.

# Compatibilité Python
<a name="python-compatibility"></a>

CodeArtifact ne prend pas en charge les PyPI ou. `XML-RPC` `JSON` APIs

CodeArtifact supporte PyPI, à l'exception `Legacy` APIs de l'`simple`API. Bien qu' CodeArtifact il ne prenne pas en charge le point de terminaison de l'`/simple/`API, il prend en charge le `/simple/<project>/` point de terminaison.

Pour plus d'informations, consultez ce qui suit sur le GitHub référentiel de la Python Packaging Authority.
+ [API XML-RPC](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/xml-rpc.rst)
+ [API JSON](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/json.rst)
+ [API héritée](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/legacy.rst)

## support de la commande pip
<a name="pip-command-support"></a>

Les sections suivantes résument les commandes pip prises en charge par les CodeArtifact référentiels, en plus des commandes spécifiques non prises en charge.

**Topics**
+ [Commandes prises en charge qui interagissent avec un référentiel](#supported-pip-commands-that-interact-with-a-repository)
+ [Commandes côté client prises en charge](#supported-pip-client-side-commands)

### Commandes prises en charge qui interagissent avec un référentiel
<a name="supported-pip-commands-that-interact-with-a-repository"></a>

Cette section répertorie `pip` les commandes dans lesquelles le `pip` client envoie une ou plusieurs requêtes au registre avec lequel il a été configuré. Il a été vérifié que ces commandes fonctionnent correctement lorsqu'elles sont invoquées dans un CodeArtifact dépôt.


****  

| Commande | Description | 
| --- | --- | 
|   [installer](https://pip.pypa.io/en/stable/reference/pip_install/)   |  Installez les packages.  | 
|   [télécharger](https://pip.pypa.io/en/stable/reference/pip_download/)   |  Téléchargez les packages.  | 

CodeArtifact ne met pas en œuvre`pip search`. Si vous avez configuré `pip` avec un CodeArtifact référentiel, l'exécution `pip search` recherchera et affichera les packages de [PyPI](https://pypi.org/).

### Commandes côté client prises en charge
<a name="supported-pip-client-side-commands"></a>

Ces commandes ne nécessitent aucune interaction directe avec un dépôt, il n'est donc CodeArtifact pas nécessaire de faire quoi que ce soit pour les prendre en charge.


****  

| Commande | Description | 
| --- | --- | 
|   [désinstaller](https://pip.pypa.io/en/stable/reference/pip_uninstall/)   |  Désinstallez les packages.  | 
|   [geler](https://pip.pypa.io/en/stable/reference/pip_freeze/)   |  Afficher les packages installés au format des exigences.  | 
|   [liste](https://pip.pypa.io/en/stable/reference/pip_list/)   |  Répertoriez les packages installés.  | 
|   [sh](https://pip.pypa.io/en/stable/reference/pip_show/)ow   |  Afficher les informations sur les packages installés.  | 
|   [vérifier](https://pip.pypa.io/en/stable/reference/pip_check/)   |  Vérifiez que les packages installés ont des dépendances compatibles.  | 
|   [configuration](https://pip.pypa.io/en/stable/reference/pip_config/)   |  Gérez la configuration locale et globale.  | 
|   [roue](https://pip.pypa.io/en/stable/reference/pip_wheel/)   |  Construisez des roues selon vos besoins.  | 
|   [hachage](https://pip.pypa.io/en/stable/reference/pip_hash/)   |  Calculez les hachages des archives de packages.  | 
|   [achèvement](https://pip.pypa.io/en/stable/user_guide/#command-completion)   |  Facilite l'exécution des commandes.  | 
|   [debug](https://pip.pypa.io/en/stable/reference/pip_debug/)   |  Afficher les informations utiles pour le débogage.  | 
|  help  |  Afficher l'aide pour les commandes.  | 

# Demande de packages Python depuis des connexions en amont et externes
<a name="python-upstream-external-connections-request"></a>

Lorsque vous importez une version de package Python depuis [pypi.org](https://pypi.org/), tous les actifs de cette version de package CodeArtifact seront importés. Alors que la plupart des packages Python contiennent un petit nombre d'actifs, certains en contiennent plus de 100, généralement pour prendre en charge plusieurs architectures matérielles et interpréteurs Python.

Il est courant que de nouveaux actifs soient publiés sur pypi.org pour une version de package existante. Par exemple, certains projets publient de nouvelles ressources lorsque de nouvelles versions de Python sont publiées. Lorsqu'un package Python est installé à partir de CodeArtifact with`pip install`, les versions du package conservées dans le CodeArtifact référentiel sont mises à jour pour refléter le dernier ensemble d'actifs de pypi.org.

De même, si de nouveaux actifs sont disponibles pour une version de package dans un CodeArtifact référentiel en amont qui ne sont pas présents dans le CodeArtifact référentiel actuel, ils seront conservés dans le référentiel actuel lors `pip install` de son exécution.

## Versions du package supprimées
<a name="python-yanked-versions"></a>

*Certaines versions de package sur pypi.org sont marquées comme supprimées, ce qui indique à l'installateur du package (comme pip) que la version ne doit pas être installée sauf si elle est la seule à correspondre à un spécificateur de version (en utilisant l'un ou l'autre).* `==` `===` Voir [PEP\$1592](https://peps.python.org/pep-0592/) pour plus d'informations.

Si une version de package CodeArtifact a été initialement récupérée à partir d'une connexion externe à [pypi.org](https://pypi.org/), lorsque vous installez la version du package depuis un CodeArtifact dépôt, CodeArtifact assurez-vous que les métadonnées supprimées mises à jour de la version du package sont extraites de pypi.org.

### Comment savoir si une version de package est supprimée
<a name="test-yanked-version"></a>

Pour vérifier si une version du package est intégrée CodeArtifact, vous pouvez essayer de l'installer avec`pip install packageName===packageVersion`. Si la version du package est supprimée, vous recevrez un message d'avertissement semblable au suivant :

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

Pour vérifier si une version du package est supprimée dans [pypi.org, vous pouvez consulter la liste pypi.org](https://pypi.org/) de la version du package à l'adresse suivante. `https://pypi.org/project/packageName/packageVersion/`

### Configuration du statut de retrait sur les packages privés
<a name="yanked-private-packages"></a>

CodeArtifact ne prend pas en charge la définition de métadonnées supprimées pour les packages publiés directement dans les CodeArtifact référentiels.

## Pourquoi ne CodeArtifact pas récupérer les dernières métadonnées ou ressources supprimées pour une version de package ?
<a name="no-yanked-metadata"></a>

[Normalement, CodeArtifact garantit que lorsqu'une version de package Python est extraite d'un CodeArtifact dépôt, les métadonnées extraites ont la dernière valeur sur pypi.org. up-to-date](https://pypi.org/) En outre, la liste des actifs de la version du package est également mise à jour avec la dernière version sur pypi.org et sur tous les référentiels en amont CodeArtifact . Cela est vrai si vous installez la version du package pour la première fois et que vous l' CodeArtifact importez depuis pypi.org dans votre CodeArtifact dépôt, ou si vous avez déjà installé le package. Cependant, dans certains cas, le client du gestionnaire de packages, tel que pip, n'extrait pas les dernières métadonnées extraites de pypi.org ou des référentiels en amont. Au lieu de cela, il CodeArtifact renverra les données déjà stockées dans votre référentiel. Cette section décrit les trois manières dont cela peut se produire :

**Configuration en amont :** si la connexion externe à pypi.org est supprimée du référentiel ou de ses flux en amont à l'aide de pypi.org [disassociate-external-connection](external-connection.md#removing-an-external-connection), les métadonnées supprimées ne seront plus actualisées depuis pypi.org. De même, si vous supprimez un référentiel en amont, les ressources du référentiel supprimé et des ressources en amont du référentiel supprimé ne seront plus accessibles au référentiel actuel. Il en va de même si vous utilisez les [contrôles d'origine des CodeArtifact packages](package-origin-controls.md) pour empêcher l'extraction de nouvelles versions d'un package spécifique. Ce paramètre `upstream=BLOCK` empêchera l'actualisation des métadonnées extraites.

**État de la version du package :** si vous définissez le statut d'une version de package sur autre chose que « `Published` ou »`Unlisted`, les métadonnées et les actifs retirés de la version du package ne seront pas actualisés. De même, si vous récupérez une version de package spécifique (par exemple`torch 2.0.1`) et que la même version de package est présente dans un référentiel en amont avec un statut qui n'est pas `Published` ou`Unlisted`, cela bloquera également les métadonnées extraites et la propagation des actifs du référentiel en amont vers le référentiel actuel. Cela est dû au fait que les autres statuts de version de package indiquent que les versions ne sont plus destinées à être consommées dans aucun référentiel.

**Publication directe :** si vous publiez une version de package spécifique directement dans un CodeArtifact référentiel, cela empêchera le retrait des métadonnées et l'actualisation des ressources pour la version du package depuis ses référentiels en amont et depuis pypi.org. Supposons, par exemple, que vous téléchargiez une ressource à partir de la version du package`torch 2.0.1`, par exemple`torch-2.0.1-cp311-none-macosx_11_0_arm64.whl`, à l'aide d'un navigateur Web, puis que vous la publiez dans votre CodeArtifact référentiel à l'aide de twine as`torch 2.0.1`. CodeArtifact vérifie que la version du package est entrée dans le domaine en la publiant directement dans votre dépôt, et non à partir d'une connexion externe à pypi.org ou d'un dépôt en amont. Dans ce cas, les métadonnées CodeArtifact extraites ne sont pas synchronisées avec les référentiels en amont ou avec pypi.org. Il en va de même si vous publiez `torch 2.0.1` dans un référentiel en amont : la présence de la version du package bloquera la propagation des métadonnées et des actifs extraits vers les référentiels situés plus bas dans le graphique en amont.