

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usando CodeArtifact com Python
<a name="using-python"></a>

Esses tópicos descrevem como usar `pip` o gerenciador de pacotes Python e `twine` o utilitário de publicação de pacotes Python com. CodeArtifact

**Topics**
+ [Configure e use o pip com CodeArtifact](python-configure-pip.md)
+ [Configure e use o twine com CodeArtifact](python-configure-twine.md)
+ [Normalização do nome do pacote Python](python-name-normalization.md)
+ [Compatibilidade com o Python](python-compatibility.md)
+ [Solicitar pacotes Python de upstreams e conexões externas](python-upstream-external-connections-request.md)

# Configure e use o pip com CodeArtifact
<a name="python-configure-pip"></a>

[pip](https://pypi.org/project/pip/) é o instalador de pacotes para pacotes Python. Para usar o pip para instalar pacotes Python do CodeArtifact seu repositório, você deve primeiro configurar o cliente pip com as informações e credenciais do CodeArtifact seu repositório.

O pip só pode ser usado para instalar pacotes Python. Para publicar pacotes Python, você pode usar o [twine](https://pypi.org/project/twine/). Para obter mais informações, consulte [Configure e use o twine com CodeArtifact](python-configure-twine.md).

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

Primeiro, configure suas AWS credenciais para uso com o AWS CLI, conforme descrito em[Conceitos básicos do CodeArtifact](getting-started.md). Em seguida, use o CodeArtifact `login` comando para buscar as credenciais e configurar `pip` com elas.

**nota**  
Se você estiver acessando um repositório em um domínio de sua propriedade, não será necessário incluir `--domain-owner`. Para obter mais informações, consulte [Domínios entre contas](domain-overview.md#domain-overview-cross-account).

Para configurar o pip, execute o seguinte comando.

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

 `login`busca um token de autorização CodeArtifact usando suas AWS credenciais. O `login` comando será CodeArtifact configurado `pip` para uso com `~/.config/pip/pip.conf` a edição para definir o `index-url` para o repositório especificado pela `--repository` opção.

O período de autorização padrão após chamar o `login` é de 12 horas e o `login` deve ser chamado para atualizar o token periodicamente. Para obter mais informações sobre o token de autorização criado com o comando `login`, consulte [Tokens criados com o comando `login`](tokens-authentication.md#auth-token-login).

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

 Se você não puder usar o comando `login` para configurar o `pip`, você pode usar `pip config`.

1. Use o AWS CLI para obter um novo token de autorização.
**nota**  
Se você estiver acessando um repositório em um domínio de sua propriedade, não precisa incluir `--domain-owner`. Para obter mais informações, consulte [Domínios entre contas](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. Use `pip config` para definir o URL e as credenciais do CodeArtifact registro. O comando a seguir atualizará somente o arquivo de configuração do ambiente atual. Para atualizar o arquivo de configuração de todo o sistema, substitua `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**  
Para usar um endpoint de pilha dupla, use o endpoint `codeartifact.region.on.aws`.

**Importante**  
O URL de registro deve terminar com uma barra inclinada (/). Do contrário, você não poderá se conectar ao repositório.

**Exemplo de arquivo de configuração do pip**

Veja a seguir um exemplo de `pip.conf` arquivo após definir o URL e as credenciais CodeArtifact do registro.

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

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

Para executar `pip` comandos, você deve configurar `pip` com CodeArtifact. Para obter mais informações, consulte a documentação a seguir.

1. Siga as etapas na [Configurando com AWS CodeArtifact](get-set-up-for-codeartifact.md) seção para configurar sua AWS conta, ferramentas e permissões.

1. Configure o `twine` seguindo as etapas em [Configure e use o twine com CodeArtifact](python-configure-twine.md).

Supondo que um pacote esteja presente em seu repositório ou em um de seus repositórios upstream, você pode instalá-lo com `pip install`. Por exemplo, use o seguinte comando para instalar o pacote `requests`.

```
pip install requests
```

Use a `-i` opção de reverter temporariamente a instalação de pacotes do [https://pypi.org](https://pypi.org) em vez do seu CodeArtifact repositório.

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

# Configure e use o twine com CodeArtifact
<a name="python-configure-twine"></a>

O [twine](https://pypi.org/project/twine/) é um utilitário de publicação de pacotes para pacotes Python. Para usar o twine para publicar pacotes Python no CodeArtifact seu repositório, você deve primeiro configurar o twine com as informações e credenciais do CodeArtifact seu repositório.

O twine só pode ser usado para publicar pacotes Python. Para instalar pacotes Python, você pode usar o [pip](https://pypi.org/project/pip/). Para obter mais informações, consulte [Configure e use o pip com CodeArtifact](python-configure-pip.md).

## Configure o twine com o comando `login`
<a name="python-configure-twine-login"></a>

Primeiro, configure suas AWS credenciais para uso com o AWS CLI, conforme descrito em[Conceitos básicos do CodeArtifact](getting-started.md). Em seguida, use o CodeArtifact `login` comando para buscar as credenciais e configurar o twine com elas.

**nota**  
Se você estiver acessando um repositório em um domínio de sua propriedade, não será necessário incluir `--domain-owner`. Para obter mais informações, consulte [Domínios entre contas](domain-overview.md#domain-overview-cross-account).

Para configurar o twine, execute o seguinte comando.

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

 `login`busca um token de autorização CodeArtifact usando suas AWS credenciais. O `login` comando configura o twine para uso com CodeArtifact `~/.pypirc` a edição para adicionar o repositório especificado pela `--repository` opção com credenciais.

O período de autorização padrão após chamar o `login` é de 12 horas e o `login` deve ser chamado para atualizar o token periodicamente. Para obter mais informações sobre o token de autorização criado com o comando `login`, consulte [Tokens criados com o comando `login`](tokens-authentication.md#auth-token-login).

## Configure o twine sem o comando `login`
<a name="python-configure-twine-without-login"></a>

 Se você não puder usar o comando `login` para configurar o twine, pode usar o arquivo `~/.pypirc` ou as variáveis de ambiente. Para usar o arquivo `~/.pypirc`, adicione as seguintes entradas a ele. A senha deve ser um token de autenticação adquirido pela 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**  
Para usar um endpoint de pilha dupla, use o endpoint `codeartifact.region.on.aws`.

Para usar variáveis de ambiente, faça o seguinte.

**nota**  
Se você estiver acessando um repositório em um domínio de sua propriedade, não precisa incluir `--domain-owner`. Para obter mais informações, consulte [Domínios entre contas](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`
```

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

Antes de usar o twine para publicar ativos do pacote Python, você deve primeiro CodeArtifact configurar permissões e recursos.

1. Siga as etapas na [Configurando com AWS CodeArtifact](get-set-up-for-codeartifact.md) seção para configurar sua AWS conta, ferramentas e permissões.

1. Configure o twine seguindo as etapas em [Configure o twine com o comando `login`](#python-configure-twine-login) ou [Configure o twine sem o comando `login`](#python-configure-twine-without-login).

Depois de configurar o twine, você pode executar comandos `twine`. Use o seguinte comando para publicar os ativos do pacote Python.

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

Para obter informações sobre como criar e empacotar seu aplicativo Python, consulte [Gerando arquivos de distribuição](https://packaging.python.org/tutorials/packaging-projects/#generating-distribution-archives) no site da Python Packaging Authority.

# Normalização do nome do pacote Python
<a name="python-name-normalization"></a>

CodeArtifact normaliza os nomes dos pacotes antes de armazená-los, o que significa que os nomes dos pacotes CodeArtifact podem ser diferentes do nome fornecido quando o pacote foi publicado.

Ao realizar a normalização dos pacotes Python, o nome do pacote é colocado em minúsculas e todas as instâncias dos caracteres `.`, `-` e `_` são substituídas por um único caractere `-`. Portanto, os nomes dos pacotes `pigeon_cli` e `pigeon.cli` são normalizados e armazenados como `pigeon-cli`. O nome não normalizado pode ser usado por pip e twine, mas o nome normalizado deve ser usado em solicitações de CodeArtifact CLI ou API (como) e em. `list-package-versions` ARNs Para obter mais informações sobre a normalização de nome de pacote Python, consulte [PEP 503](https://www.python.org/dev/peps/pep-0503/#normalized-names) na documentação do Python.

# Compatibilidade com o Python
<a name="python-compatibility"></a>

CodeArtifact não suporta PyPI ou. `XML-RPC` `JSON` APIs

CodeArtifact suporta PyPI `Legacy` APIs, exceto a `simple` API. Embora CodeArtifact não seja compatível com o endpoint `/simple/` da API, ele oferece suporte ao `/simple/<project>/` endpoint.

Para obter mais informações, consulte o seguinte no repositório da 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 legada](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/legacy.rst)

## Suporte para comandos pip
<a name="pip-command-support"></a>

As seções a seguir resumem os comandos pip que são suportados pelos CodeArtifact repositórios, além dos comandos específicos que não são suportados.

**Topics**
+ [Comandos compatíveis que interagem com um repositório](#supported-pip-commands-that-interact-with-a-repository)
+ [Comandos do lado do cliente compatíveis](#supported-pip-client-side-commands)

### Comandos compatíveis que interagem com um repositório
<a name="supported-pip-commands-that-interact-with-a-repository"></a>

Esta seção lista os comandos `pip` em que o cliente `pip` faz uma ou mais solicitações ao registro com o qual foi configurado. Foi verificado que esses comandos funcionam corretamente quando invocados em um CodeArtifact repositório.


****  

| Command | Description | 
| --- | --- | 
|   [install](https://pip.pypa.io/en/stable/reference/pip_install/)   |  Instalar pacotes.  | 
|   [baixar](https://pip.pypa.io/en/stable/reference/pip_download/)   |  Baixar pacotes.  | 

CodeArtifact não implementa`pip search`. Se você configurou `pip` com um CodeArtifact repositório, a execução `pip search` pesquisará e mostrará pacotes do [PyPI](https://pypi.org/).

### Comandos do lado do cliente compatíveis
<a name="supported-pip-client-side-commands"></a>

Esses comandos não exigem nenhuma interação direta com um repositório, portanto, CodeArtifact não é necessário fazer nada para suportá-los.


****  

| Command | Description | 
| --- | --- | 
|   [uninstall](https://pip.pypa.io/en/stable/reference/pip_uninstall/)   |  Desinstalar pacotes.  | 
|   [freeze](https://pip.pypa.io/en/stable/reference/pip_freeze/)   |  Emita pacotes instalados no formato de requisitos.  | 
|   [list](https://pip.pypa.io/en/stable/reference/pip_list/)   |  Listar pacotes instalados.  | 
|   [show](https://pip.pypa.io/en/stable/reference/pip_show/)   |  Mostre informações sobre os pacotes instalados.  | 
|   [check](https://pip.pypa.io/en/stable/reference/pip_check/)   |  Verifique se os pacotes instalados têm dependências compatíveis.  | 
|   [config](https://pip.pypa.io/en/stable/reference/pip_config/)   |  Gerencie a configuração local e global.  | 
|   [wheel](https://pip.pypa.io/en/stable/reference/pip_wheel/)   |  Construa rodas conforme suas necessidades.  | 
|   [hash](https://pip.pypa.io/en/stable/reference/pip_hash/)   |  Calcule hashes de arquivos de pacotes.  | 
|   [completion](https://pip.pypa.io/en/stable/user_guide/#command-completion)   |  Ajuda na conclusão do comando.  | 
|   [debug](https://pip.pypa.io/en/stable/reference/pip_debug/)   |  Mostre informações úteis para depuração.  | 
|  help  |  Mostre ajuda para comandos.  | 

# Solicitar pacotes Python de upstreams e conexões externas
<a name="python-upstream-external-connections-request"></a>

Ao importar uma versão do pacote Python do [pypi.org](https://pypi.org/), o CodeArtifact importa todos os ativos dessa versão do pacote. Embora a maioria dos pacotes Python contenha um pequeno número de ativos, alguns contêm mais de 100, normalmente para oferecer suporte a várias arquiteturas de hardware e interpretadores de Python.

É comum que novos ativos sejam publicados em pypi.org para uma versão de pacote existente. Por exemplo, alguns projetos publicam novos ativos quando novas versões do Python são lançadas. Quando um pacote Python é instalado pelo CodeArtifact com `pip install`, as versões do pacote retidas no repositório do CodeArtifact são atualizadas para refletir o conjunto mais recente de ativos do pypi.org.

Da mesma forma, se novos ativos estiverem disponíveis para uma versão de pacote em um repositório upstream do CodeArtifact que não estejam presentes no repositório atual do CodeArtifact, eles serão mantidos no repositório atual quando `pip install` é executado.

## Versões de pacotes retirados
<a name="python-yanked-versions"></a>

Algumas versões do pacote em pypi.org são marcadas como *retiradas*, o que comunica ao instalador do pacote (como pip) que a versão não deve ser instalada, a menos que seja a única que corresponda a um especificador de versão (usando `==` ou `===`). Para obter mais informações, consulte a [PEP\$1592](https://peps.python.org/pep-0592/).

Se uma versão de pacote no CodeArtifact foi originalmente obtida de uma conexão externa em [pypi.org](https://pypi.org/), ao instalar a versão do pacote de um repositório do CodeArtifact, o CodeArtifact garante que os metadados retirados e atualizados da versão do pacote sejam obtidos em pypi.org.

### Como saber se uma versão do pacote foi retirada
<a name="test-yanked-version"></a>

Para verificar se uma versão do pacote foi retirada do CodeArtifact, você pode tentar instalá-la com `pip install packageName===packageVersion`. Se a versão do pacote for retirada, será exibida uma mensagem de aviso semelhante à seguinte:

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

Para verificar se uma versão do pacote foi retirada em [pypi.org](https://pypi.org/), você pode visitar a lista do pypi.org para a versão do pacote em `https://pypi.org/project/packageName/packageVersion/`.

### Definir o status de retirado em pacotes privados
<a name="yanked-private-packages"></a>

O CodeArtifact não é compatível com a configuração de metadados retirados para pacotes publicados diretamente nos repositórios do CodeArtifact.

## Por que o CodeArtifact não está buscando os metadados ou ativos retirados mais recentes para uma versão do pacote?
<a name="no-yanked-metadata"></a>

[Normalmente, o CodeArtifact garante que, quando uma versão do pacote Python é obtida de um repositório do CodeArtifact, os metadados retirados estejam atualizados com o valor mais recente em pypi.org](https://pypi.org/). Além disso, a lista de ativos na versão do pacote também é mantida atualizada com o conjunto mais recente em pypi.org e em qualquer repositório upstream do CodeArtifact. Isso vale se você estiver instalando a versão do pacote pela primeira vez e o CodeArtifact importá-la do pypi.org para o seu repositório do CodeArtifact ou se você tiver instalado o pacote antes. No entanto, há casos em que o cliente do gerenciador de pacotes, como pip, não extrai os últimos metadados retirados de pypi.org ou repositórios upstream. Em vez disso, o CodeArtifact retornará os dados que já estão armazenados no repositório. Esta seção descreve as três maneiras pelas quais isso pode ocorrer:

**Configuração upstream:** se a conexão externa com pypi.org for removida do repositório ou seus upstreams usando [disassociate-external-connection](external-connection.md#removing-an-external-connection), os metadados retirados não serão mais atualizados do pypi.org. Da mesma forma, se você remover um repositório upstream, os ativos do repositório removido e dos upstreams do repositório removido não estarão mais disponíveis para o repositório atual. O mesmo acontece se você usar os [controles de origem do pacote](package-origin-controls.md) CodeArtifact para evitar que novas versões de um pacote específico sejam retiradas; a configuração de `upstream=BLOCK` impedirá que os metadados retirados sejam atualizados.

**Status da versão do pacote:** se você definir o status de uma versão do pacote para qualquer coisa exceto `Published` ou `Unlisted`, os metadados e ativos retirados da versão do pacote não serão atualizados. Da mesma forma, se você estiver buscando uma versão específica do pacote (digamos `torch 2.0.1`) e a mesma versão do pacote estiver presente em um repositório de upstream com um status que não é `Published` ou `Unlisted`, isso também bloqueará a propagação de metadados e ativos retirados do repositório upstream para o repositório atual. Isso ocorre porque outros status de versão do pacote são uma indicação de que as versões não devem mais ser consumidas em nenhum repositório.

**Publicação direta:** se você publicar uma versão específica do pacote diretamente em um repositório do CodeArtifact, isso evitará a atualização de metadados e ativos retirados para a versão do pacote de seus repositórios upstream e pypi.org. Por exemplo, digamos que você baixe um ativo da versão do pacote `torch 2.0.1`, como `torch-2.0.1-cp311-none-macosx_11_0_arm64.whl`, usando um navegador da web e, em seguida, faz a publicação no seu repositório do CodeArtifact usando twine como `torch 2.0.1`. O CodeArtifact rastreia se a versão do pacote entrou no domínio por meio da publicação direta no repositório, não de uma conexão externa com pypi.org ou um repositório upstream. Nesse caso, o CodeArtifact não mantém os metadados retirados sincronizados com repositórios upstream ou pypi.org. O mesmo acontece se você publicar o `torch 2.0.1` em um repositório upstream: a presença da versão do pacote bloqueará a propagação de metadados e ativos retirados para repositórios mais abaixo no gráfico de upstream.