

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

En estos temas se describe cómo usar `pip` el administrador de paquetes Python y `twine` la utilidad de publicación de paquetes Python con CodeArtifact.

**Topics**
+ [Configura y usa pip con CodeArtifact](python-configure-pip.md)
+ [Configura y usa twine con CodeArtifact](python-configure-twine.md)
+ [Normalización de nombres de paquetes de Python](python-name-normalization.md)
+ [Compatibilidad con Python](python-compatibility.md)
+ [Solicitud de paquetes de Python desde conexiones ascendentes y externas](python-upstream-external-connections-request.md)

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

[pip](https://pypi.org/project/pip/) es el instalador de paquetes para los paquetes de Python. Para usar pip para instalar paquetes de Python desde su CodeArtifact repositorio, primero debe configurar el cliente pip con la información y las credenciales de su CodeArtifact repositorio.

pip solo se puede usar para instalar paquetes de Python. Para publicar paquetes de Python, puede usar [twine](https://pypi.org/project/twine/). Para obtener más información, consulte [Configura y usa twine con CodeArtifact](python-configure-twine.md).

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

En primer lugar, configure sus AWS credenciales para usarlas con AWS CLI, tal y como se describe en. [Introducción a CodeArtifact](getting-started.md) A continuación, utilice el CodeArtifact `login` comando para obtener las credenciales y configurarlas `pip` con ellas.

**nota**  
Si va a acceder a un repositorio de un dominio de su propiedad, no tiene que incluir `--domain-owner`. Para obtener más información, consulte [Dominios entre cuentas](domain-overview.md#domain-overview-cross-account).

Ejecute el siguiente comando para configurar pip.

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

 `login`obtiene un token de autorización mediante el CodeArtifact uso de sus credenciales. AWS El `login` comando se configurará `pip` para su uso con CodeArtifact él `~/.config/pip/pip.conf` editándolo para `index-url` establecerlo en el repositorio especificado por la `--repository` opción.

El período de autorización predeterminado después de una llamada `login` es de 12 horas y `login` debe invocarse para actualizar periódicamente el token. Para obtener más información sobre el token de autorización creado con el comando `login`, consulte [Tokens creados con el comando `login`](tokens-authentication.md#auth-token-login).

## Configurar pip sin el comando login
<a name="python-configure-without-pip"></a>

 Si no puede usar el comando `login` para configurar `pip`, puede usar `pip config`.

1. Use el AWS CLI para obtener un nuevo token de autorización.
**nota**  
Si va a acceder a un repositorio de un dominio de su propiedad, no tiene que incluir el `--domain-owner`. Para obtener más información, consulte [Dominios entre cuentas](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. Se usa `pip config` para configurar la URL y las credenciales CodeArtifact del registro. El siguiente comando actualizará únicamente el archivo de configuración del entorno actual. Para actualizar el archivo de configuración de todo el sistema, sustituya `site` por `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**  
Si quiere utilizar un punto de conexión de pila doble, use el punto de conexión `codeartifact.region.on.aws`.

**importante**  
La dirección URL del registro debe terminar con una barra diagonal (/). De lo contrario, no puede conectarse al repositorio.

**Ejemplo de archivo de configuración de pip**

El siguiente es un ejemplo de un `pip.conf` archivo después de configurar la URL y las credenciales CodeArtifact del registro.

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

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

Para ejecutar `pip` comandos, debe configurarlos `pip` con CodeArtifact. Para obtener más información, consulte la documentación siguiente.

1. Siga los pasos de la [Configuración con AWS CodeArtifact](get-set-up-for-codeartifact.md) sección para configurar la AWS cuenta, las herramientas y los permisos.

1. Configure `twine` siguiendo los pasos que se describen en [Configura y usa twine con CodeArtifact](python-configure-twine.md).

Suponiendo que un paquete esté presente en su repositorio o en uno de sus repositorios ascendentes, puede instalarlo con `pip install`. Por ejemplo, utilice el siguiente comando para instalar el paquete `requests`.

```
pip install requests
```

Utilice la `-i` opción para volver temporalmente a instalar paquetes desde [https://pypi.org](https://pypi.org) en lugar de desde su CodeArtifact repositorio.

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

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

[twine](https://pypi.org/project/twine/) es una utilidad de publicación de paquetes para paquetes de Python. Para usar twine para publicar paquetes de Python en su CodeArtifact repositorio, primero debe configurar twine con la información y las credenciales de su CodeArtifact repositorio.

twine solo se puede usar para publicar paquetes de Python. Para instalar paquetes de Python, puede usar [pip](https://pypi.org/project/pip/). Para obtener más información, consulte [Configura y usa pip con CodeArtifact](python-configure-pip.md).

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

En primer lugar, configure sus AWS credenciales para usarlas con AWS CLI, tal y como se describe en. [Introducción a CodeArtifact](getting-started.md) A continuación, utilice el CodeArtifact `login` comando para obtener las credenciales y configurar Twine con ellas.

**nota**  
Si va a acceder a un repositorio de un dominio de su propiedad, no tiene que incluir `--domain-owner`. Para obtener más información, consulte [Dominios entre cuentas](domain-overview.md#domain-overview-cross-account).

Ejecute el siguiente comando para configurar el hilo.

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

 `login`obtiene un token de autorización mediante el CodeArtifact uso de sus credenciales. AWS El `login` comando configura twine para su uso con credenciales CodeArtifact editándolo `~/.pypirc` para añadir el repositorio especificado por la `--repository` opción.

El período de autorización predeterminado después de una llamada `login` es de 12 horas y `login` debe invocarse para actualizar periódicamente el token. Para obtener más información sobre el token de autorización creado con el comando `login`, consulte [Tokens creados con el comando `login`](tokens-authentication.md#auth-token-login).

## Configurar twine sin el comando `login`
<a name="python-configure-twine-without-login"></a>

 Si no puede usar el comando `login` para configurar twine, puede usar el archivo `~/.pypirc` o las variables de entorno. Para usar el archivo `~/.pypirc`, agréguele las siguientes entradas. La contraseña debe ser un token de autenticación adquirido por la API `get-authorization-token`.

```
[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**  
Si quiere utilizar un punto de conexión de pila doble, use el punto de conexión `codeartifact.region.on.aws`.

Para utilizar variables de entorno, haga lo siguiente.

**nota**  
Si va a acceder a un repositorio de un dominio de su propiedad, no tiene que incluir el `--domain-owner`. Para obtener más información, consulte [Dominios entre cuentas](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`
```

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

Antes de usar twine para publicar los activos del paquete de Python, primero debe configurar CodeArtifact los permisos y los recursos.

1. Siga los pasos de la [Configuración con AWS CodeArtifact](get-set-up-for-codeartifact.md) sección para configurar su AWS cuenta, sus herramientas y sus permisos.

1. Configure twine siguiendo los pasos que se indican en [Configurar twine con el comando `login`](#python-configure-twine-login) o [Configurar twine sin el comando `login`](#python-configure-twine-without-login).

Tras configurar twine, puede ejecutar comandos `twine`. Utilice el siguiente comando para publicar los activos del paquete de Python.

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

Para obtener información sobre cómo crear y empaquetar una aplicación de Python, consulte [Generación de archivos de distribución](https://packaging.python.org/tutorials/packaging-projects/#generating-distribution-archives) en el sitio web de Python Packaging Authority.

# Normalización de nombres de paquetes de Python
<a name="python-name-normalization"></a>

CodeArtifact normaliza los nombres de los paquetes antes de almacenarlos, lo que significa que los nombres de los paquetes CodeArtifact pueden ser diferentes del nombre proporcionado cuando se publicó el paquete.

Para los paquetes de Python, al realizar la normalización, el nombre del paquete aparece en minúsculas y todas las instancias de los caracteres `.`, `-` y `_` se sustituyen por un solo carácter `-`. Por lo tanto, los nombres de los paquetes `pigeon_cli` y `pigeon.cli` se normalizan y se almacenan como `pigeon-cli`. pip y twine pueden usar el nombre no normalizado, pero el nombre normalizado debe usarse en las solicitudes de CodeArtifact CLI o API (por ejemplo) y en. `list-package-versions` ARNs Para obtener más información sobre la normalización de los nombres de paquete de Python, consulte [PEP 503](https://www.python.org/dev/peps/pep-0503/#normalized-names) en la documentación de Python.

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

CodeArtifact no es compatible con PyPI o. `XML-RPC` `JSON` APIs

CodeArtifact es compatible con PyPI `Legacy` APIs, excepto la API. `simple` Si bien CodeArtifact no es compatible con el punto final de la `/simple/` API, sí es compatible con el `/simple/<project>/` punto final.

Para obtener más información, consulte lo siguiente en el GitHub repositorio de 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 heredada](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/legacy.rst)

## soporte de comandos pip
<a name="pip-command-support"></a>

En las siguientes secciones se resumen los comandos pip que admiten los CodeArtifact repositorios, además de los comandos específicos que no son compatibles.

**Topics**
+ [Comandos compatibles que interactúan con un repositorio](#supported-pip-commands-that-interact-with-a-repository)
+ [Comandos del lado del cliente compatibles](#supported-pip-client-side-commands)

### Comandos compatibles que interactúan con un repositorio
<a name="supported-pip-commands-that-interact-with-a-repository"></a>

En esta sección se enumeran los comandos `pip` en los que el cliente `pip` realiza una o más solicitudes al registro con el que se ha configurado. Se ha comprobado que estos comandos funcionan correctamente cuando se invocan en un repositorio. CodeArtifact 


****  

| Comando | Description (Descripción) | 
| --- | --- | 
|   [install](https://pip.pypa.io/en/stable/reference/pip_install/)   |  Instalar paquetes.  | 
|   [download](https://pip.pypa.io/en/stable/reference/pip_download/)   |  Descargar paquetes.  | 

CodeArtifact no implementa`pip search`. Si lo has configurado `pip` con un CodeArtifact repositorio, al ejecutar `pip search` se buscarán y mostrarán los paquetes de [PyPI](https://pypi.org/).

### Comandos del lado del cliente compatibles
<a name="supported-pip-client-side-commands"></a>

Estos comandos no requieren ninguna interacción directa con un repositorio, por lo que CodeArtifact no es necesario hacer nada para respaldarlos.


****  

| Comando | Description (Descripción) | 
| --- | --- | 
|   [uninstall](https://pip.pypa.io/en/stable/reference/pip_uninstall/)   |  Desinstalar paquetes.  | 
|   [freeze](https://pip.pypa.io/en/stable/reference/pip_freeze/)   |  Salida de paquetes instalados en formato de requisitos.  | 
|   [list](https://pip.pypa.io/en/stable/reference/pip_list/)   |  Ver una lista de los paquetes instalados.  | 
|   [show](https://pip.pypa.io/en/stable/reference/pip_show/)   |  Mostrar información acerca de los paquetes instalados.  | 
|   [check](https://pip.pypa.io/en/stable/reference/pip_check/)   |  Comprobar que los paquetes instalados tengan dependencias compatibles.  | 
|   [config](https://pip.pypa.io/en/stable/reference/pip_config/)   |  Administrar la configuración local y global.  | 
|   [wheel](https://pip.pypa.io/en/stable/reference/pip_wheel/)   |  Construir ruedas a partir de sus necesidades.  | 
|   [hash](https://pip.pypa.io/en/stable/reference/pip_hash/)   |  Calcular los hashes de los archivos de los paquetes.  | 
|   [completion](https://pip.pypa.io/en/stable/user_guide/#command-completion)   |  Ayuda a completar los comandos.  | 
|   [debug](https://pip.pypa.io/en/stable/reference/pip_debug/)   |  Mostrar información útil para depuración.  | 
|  help  |  Mostrar la ayuda para los comandos.  | 

# Solicitud de paquetes de Python desde conexiones ascendentes y externas
<a name="python-upstream-external-connections-request"></a>

Al importar una versión de paquete de Python desde [pypi.org](https://pypi.org/), CodeArtifact importará todos los activos de esa versión de paquete. Si bien la mayoría de los paquetes de Python contienen una pequeña cantidad de activos, algunos contienen más de 100 activos, normalmente para admitir múltiples arquitecturas de hardware e intérpretes de Python.

Es habitual que se publiquen nuevos activos en pypi.org para una versión de paquete existente. Por ejemplo, algunos proyectos publican nuevos activos cuando se lanzan nuevas versiones de Python. Cuando se instala un paquete de Python desde CodeArtifact con `pip install`, las versiones del paquete que se conservan en el repositorio de CodeArtifact se actualizan para reflejar el último conjunto de activos de pypi.org.

Del mismo modo, si hay nuevos activos disponibles para una versión de paquete en un repositorio de CodeArtifact anterior que no están presentes en el repositorio de CodeArtifact actual, se conservarán en el repositorio actual cuando se ejecute `pip install`.

## Versiones de paquetes retiradas
<a name="python-yanked-versions"></a>

Algunas versiones de paquetes en pypi.org están marcadas como *retiradas,* lo que indica al instalador del paquete (por ejemplo, pip) que la versión no debe instalarse a menos que sea la única que coincida con un especificador de versión (utilizando `==` o `===`). Consulte [PEP\$1592](https://peps.python.org/pep-0592/) para obtener más información.

Si la versión de un paquete en CodeArtifact se obtuvo originalmente desde una conexión externa a [pypi.org](https://pypi.org/), al instalar la versión del paquete desde un repositorio de CodeArtifact, CodeArtifact se asegura de que los metadatos extraídos actualizados de la versión del paquete se obtengan de pypi.org.

### Cómo saber si se ha retirado una versión de un paquete
<a name="test-yanked-version"></a>

Para comprobar si una versión de un paquete está eliminada en CodeArtifact, puede intentar instalarla con `pip install packageName===packageVersion`. Si la versión del paquete está retirada, recibirá un mensaje de advertencia similar al siguiente:

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

Para comprobar si una versión de paquete ha sido eliminada de [pypi.org](https://pypi.org/), puede visitar la lista de pypi.org de la versión del paquete en `https://pypi.org/project/packageName/packageVersion/`.

### Establecer el estado de retirada en los paquetes privados
<a name="yanked-private-packages"></a>

CodeArtifact no admite la configuración de metadatos retirados para los paquetes publicados directamente en los repositorios de CodeArtifact.

## ¿Por qué CodeArtifact no obtiene los últimos metadatos o activos retirados para una versión de paquete?
<a name="no-yanked-metadata"></a>

Normalmente, CodeArtifact garantiza que cuando se obtiene una versión de un paquete de Python de un repositorio de CodeArtifact, los metadatos extraídos estén actualizados con el último valor de [pypi.org](https://pypi.org/). Además, la lista de activos de la versión de paquete también se mantiene actualizada con el conjunto más reciente en pypi.org y en cualquier repositorio principal de CodeArtifact. Esto es cierto tanto si instala la versión del paquete por primera vez y CodeArtifact la importa desde pypi.org a su repositorio de CodeArtifact, como si ha instalado el paquete anteriormente. Sin embargo, hay casos en los que el cliente del administrador de paquetes, como pip, no extrae los últimos metadatos extraídos de pypi.org o repositorios principales. En su lugar, CodeArtifact devolverá los datos que ya están almacenados en su repositorio. En esta sección se describen las tres formas en que esto puede ocurrir:

**Configuración inicial:** si elimina la conexión externa a pypi.org desde el repositorio o sus fuentes de distribución mediante [disassociate-external-connection](external-connection.md#removing-an-external-connection), los metadatos extraídos ya no se actualizarán de pypi.org. Del mismo modo, si elimina un repositorio principal, los activos del repositorio eliminado y de las fuentes de distribución del repositorio eliminado dejarán de estar disponibles en el repositorio actual. Lo mismo ocurre si utiliza los [controles de origen del paquete](package-origin-controls.md) CodeArtifact para evitar que se extraigan nuevas versiones de un paquete específico; la configuración `upstream=BLOCK` bloqueará la actualización de los metadatos retirados.

**Estado de la versión del paquete:** si establece el estado de la versión de un paquete en cualquier otra opción excepto `Published` o `Unlisted`, los metadatos y activos retirados de la versión del paquete no se actualizarán. Del mismo modo, si está buscando una versión de paquete específica (por ejemplo, `torch 2.0.1`) y la misma versión de paquete está presente en un repositorio principal con un estado que no es `Published` o `Unlisted`, esto también impedirá la propagación de los metadatos y activos retirados del repositorio principal al repositorio actual. Esto se debe a que los estados de las versiones de otros paquetes indican que las versiones ya no están destinadas a consumirse en ningún repositorio.

**Publicación directa:** si publica una versión de paquete específica directamente en un repositorio de CodeArtifact, esto impedirá la actualización de los metadatos y activos retirados para la versión del paquete de sus repositorios principales y pypi.org. Por ejemplo, supongamos que descarga un activo de la versión `torch 2.0.1` del paquete, por ejemplo `torch-2.0.1-cp311-none-macosx_11_0_arm64.whl`, usando un navegador web y luego lo publica en su repositorio de CodeArtifact usando twine como `torch 2.0.1`. CodeArtifact rastrea que la versión del paquete se introdujo en el dominio mediante la publicación directa en su repositorio, no desde una conexión externa a pypi.org o un repositorio principal. En este caso, CodeArtifact no mantiene los metadatos retirados sincronizados con los repositorios principales o con pypi.org. Lo mismo ocurre si publica `torch 2.0.1` en un repositorio principal: la presencia de la versión del paquete impedirá la propagación de los metadatos y activos retirados a los repositorios que se encuentran más abajo en el gráfico inicial.