Este guia aborda como configurar seu projeto CrewAI para instalar pacotes Python
de registros PyPI privados (Azure DevOps Artifacts, GitHub Packages, GitLab, AWS CodeArtifact, etc.)
ao implantar no CrewAI AMP.
Quando Você Precisa Disso
Se seu projeto depende de pacotes Python internos ou proprietários hospedados em um registro privado em vez do PyPI público, você precisará:- Informar ao UV onde encontrar o pacote (uma URL de index)
- Informar ao UV quais pacotes vêm desse index (um mapeamento de source)
- Fornecer credenciais para que o UV possa autenticar durante a instalação
pyproject.toml combinada
com variáveis de ambiente para credenciais.
Passo 1: Configurar o pyproject.toml
Três elementos trabalham juntos no seupyproject.toml:
1a. Declarar a dependência
Adicione o pacote privado ao seu[project.dependencies] como qualquer outra dependência:
1b. Definir o index
Registre seu registro privado como um index nomeado em[[tool.uv.index]]:
O campo
name é importante — o UV o utiliza para construir os nomes das variáveis de ambiente
para autenticação (veja o Passo 2 abaixo).Definir explicit = true significa que o UV não consultará esse index para todos os pacotes — apenas
os que você mapear explicitamente em [tool.uv.sources]. Isso evita consultas desnecessárias
ao seu registro privado e protege contra ataques de confusão de dependências.1c. Mapear o pacote para o index
Informe ao UV quais pacotes devem ser resolvidos a partir do seu index privado usando[tool.uv.sources]:
Exemplo completo
pyproject.toml, regenere seu arquivo lock:
Passo 2: Configurar Credenciais de Autenticação
O UV autentica em indexes privados usando variáveis de ambiente que seguem uma convenção de nomenclatura baseada no nome do index que você definiu nopyproject.toml:
{UPPER_NAME} é o nome do seu index convertido para maiúsculas com hifens substituídos por underscores.
Por exemplo, um index chamado my-private-registry usa:
| Variável | Valor |
|---|---|
UV_INDEX_MY_PRIVATE_REGISTRY_USERNAME | Seu nome de usuário ou nome do token do registro |
UV_INDEX_MY_PRIVATE_REGISTRY_PASSWORD | Sua senha ou token/PAT do registro |
Referência de Provedores de Registro
A tabela abaixo mostra o formato da URL de index e os valores de credenciais para provedores de registro comuns. Substitua os valores de exemplo pelos detalhes reais da sua organização e feed.| Provedor | URL do Index | Usuário | Senha |
|---|---|---|---|
| Azure DevOps Artifacts | https://pkgs.dev.azure.com/{org}/_packaging/{feed}/pypi/simple/ | Qualquer string não vazia (ex: token) | Personal Access Token (PAT) com escopo Packaging Read |
| GitHub Packages | https://pypi.pkg.github.com/{owner}/simple/ | Nome de usuário do GitHub | Personal Access Token (classic) com escopo read:packages |
| GitLab Package Registry | https://gitlab.com/api/v4/projects/{project_id}/packages/pypi/simple/ | __token__ | Project ou Personal Access Token com escopo read_api |
| AWS CodeArtifact | Use a URL de aws codeartifact get-repository-endpoint | aws | Token de aws codeartifact get-authorization-token |
| Google Artifact Registry | https://{region}-python.pkg.dev/{project}/{repo}/simple/ | _json_key_base64 | Chave de conta de serviço codificada em Base64 |
| JFrog Artifactory | https://{instance}.jfrog.io/artifactory/api/pypi/{repo}/simple/ | Nome de usuário ou email | Chave API ou token de identidade |
| Auto-hospedado (devpi, Nexus, etc.) | URL da API simple do seu registro | Nome de usuário do registro | Senha do registro |
Configurar Variáveis de Ambiente no AMP
As credenciais do registro privado devem ser configuradas como variáveis de ambiente no CrewAI AMP. Você tem duas opções:- Interface Web
- Implantação via CLI
- Faça login no CrewAI AMP
- Navegue até sua automação
- Abra a aba Environment Variables
- Adicione cada variável (
UV_INDEX_*_USERNAMEeUV_INDEX_*_PASSWORD) com seu valor
Como Tudo se Conecta
Quando o CrewAI AMP faz o build da sua automação, o fluxo de resolução funciona assim:UV resolve dependências
O UV lê
[tool.uv.sources] para determinar de qual index cada pacote deve vir.UV autentica
Para cada index privado, o UV busca
UV_INDEX_{NAME}_USERNAME e UV_INDEX_{NAME}_PASSWORD
nas variáveis de ambiente que você configurou no AMP.Pacotes são instalados
O UV baixa e instala todos os pacotes — tanto públicos (do PyPI) quanto privados (do seu registro).
Solução de Problemas
Erros de Autenticação Durante o Build
Sintoma: Build falha com401 Unauthorized ou 403 Forbidden ao resolver um pacote privado.
Verifique:
- Os nomes das variáveis de ambiente
UV_INDEX_*correspondem exatamente ao nome do seu index (maiúsculas, hifens -> underscores) - As credenciais estão definidas nas variáveis de ambiente do AMP, não apenas em um
.envlocal - Seu token/PAT tem as permissões de leitura necessárias para o feed de pacotes
- O token não expirou (especialmente relevante para AWS CodeArtifact)
Pacote Não Encontrado
Sintoma:No matching distribution found for my-private-package.
Verifique:
- A URL do index no
pyproject.tomltermina com/simple/ - A entrada
[tool.uv.sources]mapeia o nome correto do pacote para o nome correto do index - O pacote está realmente publicado no seu registro privado
- Execute
uv locklocalmente com as mesmas credenciais para verificar se a resolução funciona
Conflitos no Arquivo Lock
Sintoma:uv lock falha ou produz resultados inesperados após adicionar um index privado.
Solução: Defina as credenciais localmente e regenere:
uv.lock atualizado.
