

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Usare CodeArtifact con Python
<a name="using-python"></a>

Questi argomenti descrivono come usare`pip`, il gestore di pacchetti Python e `twine` l'utilità di pubblicazione dei pacchetti Python con. CodeArtifact

**Topics**
+ [

# Configura e usa pip con CodeArtifact
](python-configure-pip.md)
+ [

# Configura e usa twine con CodeArtifact
](python-configure-twine.md)
+ [

# Normalizzazione dei nomi dei pacchetti in Python
](python-name-normalization.md)
+ [

# Compatibilità con Python
](python-compatibility.md)
+ [

# Richiesta di pacchetti Python da upstream e connessioni esterne
](python-upstream-external-connections-request.md)

# Configura e usa pip con CodeArtifact
<a name="python-configure-pip"></a>

[pip](https://pypi.org/project/pip/) è l'installatore di pacchetti per i pacchetti Python. Per usare pip per installare i pacchetti Python dal CodeArtifact tuo repository, devi prima configurare il client pip con le informazioni e le credenziali del CodeArtifact tuo repository.

pip può essere usato solo per installare pacchetti Python. [Per pubblicare pacchetti Python, puoi usare twine.](https://pypi.org/project/twine/) Per ulteriori informazioni, consulta [Configura e usa twine con CodeArtifact](python-configure-twine.md).

## Configura pip con il comando `login`
<a name="python-configure-pip-login"></a>

Innanzitutto, configura AWS le tue credenziali da utilizzare con AWS CLI, come descritto in. [Guida introduttiva con CodeArtifact](getting-started.md) Quindi, utilizzate il CodeArtifact `login` comando per recuperare le credenziali e `pip` configurarle con esse.

**Nota**  
Se accedi a un repository in un dominio di tua proprietà, non è necessario includerlo. `--domain-owner` Per ulteriori informazioni, consulta [Domini con più account](domain-overview.md#domain-overview-cross-account).

Per configurare pip, esegui il comando seguente.

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

 `login`recupera un token di autorizzazione CodeArtifact utilizzando le tue AWS credenziali. Il `login` comando verrà configurato `pip` per essere utilizzato con CodeArtifact modificando `~/.config/pip/pip.conf` per impostare il `index-url` repository specificato dall'opzione. `--repository`

Il periodo di autorizzazione predefinito dopo la chiamata `login` è di 12 ore e `login` deve essere chiamato per aggiornare periodicamente il token. Per ulteriori informazioni sul token di autorizzazione creato con il `login` comando, vedere[Token creati con il comando `login`](tokens-authentication.md#auth-token-login).

## Configura pip senza il comando login
<a name="python-configure-without-pip"></a>

 Se non puoi usare il `login` comando per configurare`pip`, puoi usare`pip config`.

1. Utilizzate il AWS CLI per recuperare un nuovo token di autorizzazione.
**Nota**  
Se accedi a un repository in un dominio di tua proprietà, non è necessario includere il. `--domain-owner` Per ulteriori informazioni, consulta [Domini con più account](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. Utilizzare `pip config` per impostare l'URL e le credenziali del CodeArtifact registro. Il comando seguente aggiornerà solo il file di configurazione dell'ambiente corrente. Per aggiornare il file di configurazione a livello di sistema, sostituirlo `site` con. `global`

   ```
   pip config set site.index-url https://aws:$CODEARTIFACT_AUTH_TOKEN@my_domain-111122223333.d.codeartifact.region.amazonaws.com/pypi/my_repo/simple/
   ```
**Nota**  
Per utilizzare un endpoint dualstack, usa l'endpoint. `codeartifact.region.on.aws`

**Importante**  
L'URL del registro deve terminare con una barra (/). In caso contrario, non è possibile connettersi al repository.

**Esempio di file di configurazione pip**

Di seguito è riportato un esempio di `pip.conf` file dopo aver impostato l'URL e le credenziali del CodeArtifact registro.

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

## Esegui pip
<a name="python-run-pip"></a>

Per eseguire `pip` i comandi, è necessario configurare `pip` con CodeArtifact. Per ulteriori informazioni, consulta la seguente documentazione:

1. Segui i passaggi indicati nella [Configurazione con AWS CodeArtifact](get-set-up-for-codeartifact.md) sezione per configurare l' AWS account, gli strumenti e le autorizzazioni.

1. Configura `twine` seguendo la procedura riportata di seguito. [Configura e usa twine con CodeArtifact](python-configure-twine.md)

Supponendo che un pacchetto sia presente nel tuo repository o in uno dei suoi repository upstream, puoi installarlo con. `pip install` Ad esempio, utilizzate il comando seguente per installare il pacchetto. `requests`

```
pip install requests
```

Usa l'`-i`opzione per tornare temporaneamente all'installazione dei pacchetti da [https://pypi.org](https://pypi.org) anziché dal tuo CodeArtifact repository.

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

# Configura e usa twine con CodeArtifact
<a name="python-configure-twine"></a>

[twine](https://pypi.org/project/twine/) è un'utilità di pubblicazione di pacchetti per pacchetti Python. Per usare twine per pubblicare pacchetti Python nel CodeArtifact tuo repository, devi prima configurare twine con le informazioni e le credenziali del CodeArtifact tuo repository.

twine può essere usato solo per pubblicare pacchetti Python. [Per installare i pacchetti Python, puoi usare pip.](https://pypi.org/project/pip/) Per ulteriori informazioni, consulta [Configura e usa pip con CodeArtifact](python-configure-pip.md).

## Configura twine con il comando `login`
<a name="python-configure-twine-login"></a>

Innanzitutto, configura AWS le tue credenziali da utilizzare con AWS CLI, come descritto in. [Guida introduttiva con CodeArtifact](getting-started.md) Quindi, usa il CodeArtifact `login` comando per recuperare le credenziali e configurare twine con esse.

**Nota**  
Se accedi a un repository in un dominio di tua proprietà, non è necessario includerlo. `--domain-owner` Per ulteriori informazioni, consulta [Domini con più account](domain-overview.md#domain-overview-cross-account).

Per configurare twine, esegui il seguente comando.

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

 `login`recupera un token di autorizzazione CodeArtifact utilizzando le tue AWS credenziali. Il `login` comando configura twine da utilizzare con modificandolo per `~/.pypirc` aggiungere il repository specificato CodeArtifact dall'opzione con credenziali. `--repository`

Il periodo di autorizzazione predefinito dopo la chiamata `login` è di 12 ore e `login` deve essere chiamato per aggiornare periodicamente il token. Per ulteriori informazioni sul token di autorizzazione creato con il `login` comando, vedere[Token creati con il comando `login`](tokens-authentication.md#auth-token-login).

## Configura twine senza il comando `login`
<a name="python-configure-twine-without-login"></a>

 Se non è possibile utilizzare il `login` comando per configurare twine, è possibile utilizzare le variabili di `~/.pypirc` file o di ambiente. Per utilizzare il `~/.pypirc` file, aggiungete le seguenti voci. La password deve essere un token di autenticazione acquisito dall'`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
```

**Nota**  
Per utilizzare un endpoint dualstack, usa l'endpoint. `codeartifact.region.on.aws`

Per utilizzare le variabili di ambiente, procedi come segue.

**Nota**  
Se accedi a un repository in un dominio di tua proprietà, non è necessario includere il`--domain-owner`. Per ulteriori informazioni, consulta [Domini con più account](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`
```

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

Prima di usare twine per pubblicare le risorse del pacchetto Python, devi prima CodeArtifact configurare i permessi e le risorse.

1. Segui i passaggi indicati nella [Configurazione con AWS CodeArtifact](get-set-up-for-codeartifact.md) sezione per configurare l' AWS account, gli strumenti e le autorizzazioni.

1. Configura twine seguendo i passaggi in [Configura twine con il comando `login`](#python-configure-twine-login) o. [Configura twine senza il comando `login`](#python-configure-twine-without-login)

Dopo aver configurato twine, puoi eseguire `twine` i comandi. Usa il seguente comando per pubblicare gli asset del pacchetto Python.

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

Per informazioni su come creare e impacchettare la tua applicazione Python, vedi [Generating Distribution Archives](https://packaging.python.org/tutorials/packaging-projects/#generating-distribution-archives) sul sito Web Python Packaging Authority.

# Normalizzazione dei nomi dei pacchetti in Python
<a name="python-name-normalization"></a>

CodeArtifact normalizza i nomi dei pacchetti prima di memorizzarli, il che significa che i nomi dei pacchetti CodeArtifact possono essere diversi dal nome fornito quando il pacchetto è stato pubblicato.

Per i pacchetti Python, quando si esegue la normalizzazione il nome del pacchetto è in minuscolo e tutte le istanze dei caratteri vengono sostituite con un `.` singolo `-` carattere. `_` `-` Quindi i nomi dei pacchetti e sono normalizzati `pigeon_cli` e `pigeon.cli` memorizzati come. `pigeon-cli` Il nome non normalizzato può essere utilizzato da pip e twine, ma il nome normalizzato deve essere utilizzato nelle richieste CodeArtifact CLI o API (come) e in. `list-package-versions` ARNs Per ulteriori informazioni sulla normalizzazione dei nomi dei pacchetti Python, vedere [PEP 503](https://www.python.org/dev/peps/pep-0503/#normalized-names) nella documentazione di Python.

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

CodeArtifact non supporta PyPI o. `XML-RPC` `JSON` APIs

CodeArtifact supporta PyPI `Legacy` APIs, ad eccezione dell'`simple`API. Sebbene CodeArtifact non supporti l'endpoint `/simple/` API, supporta l'`/simple/<project>/`endpoint.

Per ulteriori informazioni, vedere quanto segue nel repository della Python Packaging Authority. GitHub
+ [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 legacy](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/legacy.rst)

## supporto per i comandi pip
<a name="pip-command-support"></a>

Le sezioni seguenti riepilogano i comandi pip supportati dai CodeArtifact repository, oltre ai comandi specifici che non sono supportati.

**Topics**
+ [

### Comandi supportati che interagiscono con un repository
](#supported-pip-commands-that-interact-with-a-repository)
+ [

### Comandi lato client supportati
](#supported-pip-client-side-commands)

### Comandi supportati che interagiscono con un repository
<a name="supported-pip-commands-that-interact-with-a-repository"></a>

Questa sezione elenca `pip` i comandi in cui il `pip` client effettua una o più richieste al registro con cui è stato configurato. È stato verificato che questi comandi funzionino correttamente quando vengono richiamati su un CodeArtifact repository.


****  

| Comando | Description | 
| --- | --- | 
|   [installare](https://pip.pypa.io/en/stable/reference/pip_install/)   |  Installa pacchetti.  | 
|   [scaricare](https://pip.pypa.io/en/stable/reference/pip_download/)   |  Scarica i pacchetti.  | 

CodeArtifact non implementa`pip search`. Se hai configurato `pip` con un CodeArtifact repository, l'esecuzione `pip search` cercherà e mostrerà i pacchetti da [PyPI](https://pypi.org/).

### Comandi lato client supportati
<a name="supported-pip-client-side-commands"></a>

Questi comandi non richiedono alcuna interazione diretta con un repository, quindi CodeArtifact non è necessario fare nulla per supportarli.


****  

| Comando | Description | 
| --- | --- | 
|   [disinstallare](https://pip.pypa.io/en/stable/reference/pip_uninstall/)   |  Disinstalla i pacchetti.  | 
|   [congelare](https://pip.pypa.io/en/stable/reference/pip_freeze/)   |  Visualizza i pacchetti installati nel formato dei requisiti.  | 
|   [elenco](https://pip.pypa.io/en/stable/reference/pip_list/)   |  Elenca i pacchetti installati.  | 
|   [sh](https://pip.pypa.io/en/stable/reference/pip_show/)ow   |  Mostra informazioni sui pacchetti installati.  | 
|   [controlla](https://pip.pypa.io/en/stable/reference/pip_check/)   |  Verifica che i pacchetti installati abbiano dipendenze compatibili.  | 
|   [configurazione](https://pip.pypa.io/en/stable/reference/pip_config/)   |  Gestisci la configurazione locale e globale.  | 
|   [ruota](https://pip.pypa.io/en/stable/reference/pip_wheel/)   |  Costruisci ruote in base alle tue esigenze.  | 
|   [cancelletto](https://pip.pypa.io/en/stable/reference/pip_hash/)   |  Calcola gli hash degli archivi dei pacchetti.  | 
|   [completamento](https://pip.pypa.io/en/stable/user_guide/#command-completion)   |  Aiuta a completare i comandi.  | 
|   [debug](https://pip.pypa.io/en/stable/reference/pip_debug/)   |  Mostra informazioni utili per il debug.  | 
|  aiuto  |  Mostra l'aiuto per i comandi.  | 

# Richiesta di pacchetti Python da upstream e connessioni esterne
<a name="python-upstream-external-connections-request"></a>

Quando si importa una versione del pacchetto Python [da](https://pypi.org/) pypi.org CodeArtifact , importerà tutte le risorse in quella versione del pacchetto. Sebbene la maggior parte dei pacchetti Python contenga un numero limitato di risorse, alcuni ne contengono più di 100, in genere per supportare più architetture hardware e interpreti Python.

È normale che nuove risorse vengano pubblicate su pypi.org per una versione del pacchetto esistente. Ad esempio, alcuni progetti pubblicano nuove risorse quando vengono rilasciate nuove versioni di Python. Quando un pacchetto Python viene installato da CodeArtifact con`pip install`, le versioni del pacchetto conservate nel CodeArtifact repository vengono aggiornate per riflettere l'ultimo set di risorse di pypi.org.

Allo stesso modo, se sono disponibili nuove risorse per una versione del pacchetto in un CodeArtifact repository upstream che non sono presenti nel CodeArtifact repository corrente, verranno conservate nel repository corrente quando vengono eseguite. `pip install`

## Versioni del pacchetto modificate
<a name="python-yanked-versions"></a>

Alcune versioni dei pacchetti in pypi.org sono contrassegnate come *cancellate*, il che comunica all'installatore del pacchetto (come pip) che la versione non deve essere installata a meno che non sia l'unica che corrisponde a un identificatore di versione (usando uno o). `==` `===` [Vedi PEP\$1592 per maggiori informazioni.](https://peps.python.org/pep-0592/)

Se una versione del pacchetto in CodeArtifact è stata originariamente recuperata da una connessione esterna a [pypi.org](https://pypi.org/), quando installi la versione del pacchetto da un CodeArtifact repository, CodeArtifact assicura che i metadati rimossi aggiornati della versione del pacchetto vengano recuperati da pypi.org.

### Come sapere se una versione del pacchetto è stata rimossa
<a name="test-yanked-version"></a>

Per verificare se la versione di un pacchetto è stata inserita CodeArtifact, puoi provare a installarla con. `pip install packageName===packageVersion` Se la versione del pacchetto viene rimossa, riceverai un messaggio di avviso simile al seguente:

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

Per verificare se una versione del pacchetto è stata rimossa in [pypi.org](https://pypi.org/), puoi visitare l'elenco pypi.org della versione del pacchetto all'indirizzo. `https://pypi.org/project/packageName/packageVersion/`

### Impostare lo status di «annullato» sui pacchetti privati
<a name="yanked-private-packages"></a>

CodeArtifact non supporta l'impostazione di metadati rimossi per i pacchetti pubblicati direttamente negli archivi. CodeArtifact 

## Perché CodeArtifact non sta recuperando gli ultimi metadati o risorse eliminati per una versione del pacchetto?
<a name="no-yanked-metadata"></a>

[Normalmente, CodeArtifact assicura che quando una versione del pacchetto Python viene recuperata da un CodeArtifact repository, i metadati rimossi abbiano il valore più recente su up-to-date pypi.org.](https://pypi.org/) Inoltre, l'elenco delle risorse nella versione del pacchetto viene aggiornato anche con il set più recente su pypi.org e su qualsiasi repository upstream. CodeArtifact Questo è vero sia che tu stia installando la versione del pacchetto per la prima volta e la CodeArtifact importi da pypi.org nel tuo CodeArtifact repository, sia se hai già installato il pacchetto. Tuttavia, ci sono casi in cui il client di gestione dei pacchetti, come pip, non estrae gli ultimi metadati estratti da pypi.org o dagli archivi upstream. Invece, CodeArtifact restituirà i dati già archiviati nel tuo repository. Questa sezione descrive i tre modi in cui ciò può avvenire:

**Configurazione upstream:** se la connessione esterna a pypi.org viene rimossa dal repository o dai relativi flussi upstream utilizzando [disassociate-external-connection](external-connection.md#removing-an-external-connection), i metadati rimossi non verranno più aggiornati da pypi.org. Allo stesso modo, se rimuovi un repository upstream, le risorse dal repository rimosso e dagli upstream del repository rimosso non saranno più disponibili per il repository corrente. Lo stesso vale se si utilizzano i [controlli di origine dei CodeArtifact pacchetti](package-origin-controls.md) per impedire che vengano recuperate nuove versioni di un pacchetto specifico: l'impostazione `upstream=BLOCK` bloccherà l'aggiornamento dei metadati eliminati.

**Stato della versione del pacchetto:** se imposti lo stato di una versione del pacchetto su un valore diverso da `Published` o`Unlisted`, i metadati e le risorse della versione del pacchetto eliminati non verranno aggiornati. Allo stesso modo, se state recuperando una versione specifica del pacchetto (ad esempio`torch 2.0.1`) e la stessa versione del pacchetto è presente in un repository upstream con uno stato diverso `Published` oppure`Unlisted`, ciò bloccherà anche la propagazione dei metadati e delle risorse sottratti dal repository upstream al repository corrente. Questo perché gli altri stati delle versioni del pacchetto indicano che le versioni non sono più pensate per essere utilizzate in nessun repository.

**Pubblicazione diretta:** se pubblichi una versione specifica del pacchetto direttamente in un CodeArtifact repository, ciò impedirà l'eliminazione dei metadati e dell'aggiornamento delle risorse per la versione del pacchetto dai suoi repository originali e da pypi.org. Ad esempio, supponiamo che tu scarichi una risorsa dalla versione del pacchetto`torch 2.0.1`, ad esempio usando un browser web`torch-2.0.1-cp311-none-macosx_11_0_arm64.whl`, e poi la pubblichi nel tuo repository usando twine as. CodeArtifact `torch 2.0.1` CodeArtifact traccia che la versione del pacchetto è entrata nel dominio mediante pubblicazione diretta nel tuo repository, non da una connessione esterna a pypi.org o da un repository upstream. In questo caso, CodeArtifact non mantiene i metadati eliminati sincronizzati con i repository upstream o pypi.org. Lo stesso vale se pubblicate `torch 2.0.1` in un repository upstream: la presenza della versione del pacchetto bloccherà la propagazione dei metadati e delle risorse rimossi nei repository più in basso nel grafico a monte.