Em 14 de agosto de 2026, às 19:57 UTC, a equipe da Astral publicou o release oficial do uv 0.12.5 — atualizando o gerenciador de pacotes e projetos Python escrito em Rust. A versão adiciona suporte a três point releases do CPython, aprimora o algoritmo de seleção de intérpretes de mesma prioridade, inclui URLs e hashes de distribuição por padrão em exportações CycloneDX SBOM (recurso preview) para artefatos com hash no lockfile e redige credenciais em URLs de requisitos durante o tratamento de erros e dicas de requisitos inválidos.

Os desafios de governança e supply chain em ecossistemas Python
Gerenciar ambientes de desenvolvimento, esteiras de integração contínua (CI) e contêineres em ecossistemas Python impõe desafios estruturais de governança e segurança da cadeia de suprimentos (software supply chain):
- Inconsistência na Seleção de Intérpretes: Quando um sistema possui múltiplos binários Python instalados com a mesma prioridade (por exemplo, compilações customizadas e binários padrão do sistema), a resolução do executável precisa de critérios determinísticos para evitar variações inesperadas de runtime entre desenvolvedores e servidores de build.
- Rastreabilidade e Inventário de Dependências (SBOM): Auditorias de conformidade (como SOC 2 e os níveis de integridade SLSA) exigem que o inventário de software (Software Bill of Materials - SBOM) identifique não apenas os nomes e versões dos pacotes, mas também os hashes criptográficos e as URLs exatas dos artefatos baixados.
- Exposição de Credenciais e Tokens em Logs de CI: Em repositórios que consom registros privados via autenticação HTTP básica embutida na URL do requisito, falhas de sintaxe ou requisitos editáveis inválidos podem despejar strings de conexão completas nos logs públicos de build.
O projeto uv, desenvolvido em Rust pela Astral, aborda esses pontos consolidando a resolução de dependências, gerenciamento de ferramentas e isolamento de ambientes virtuais com foco em performance e determinismo. A versão 0.12.5 introduz refinamentos nessas três frentes.
As novidades técnicas do uv 0.12.5
1. Suporte a point releases do CPython e desempate determinístico de intérpretes
A versão 0.12.5 expande a base de versões conhecidas do CPython via PR #21138, incorporando suporte às point releases de manutenção 3.10.21, 3.11.16 e 3.12.14.
Além disso, o PR #21134 refina a lógica de escolha de intérpretes Python quando múltiplos executáveis compartilham o mesmo nível de prioridade no ambiente de execução. Diante de múltiplos candidatos elegíveis com idêntica precedência, o uv passa a preferir versões mais recentes e variantes padrão do CPython em detrimento de compilações alternativas ou secundárias.
# pyproject.toml
[project]
name = "servico-backend"
version = "1.0.0"
requires-python = ">=3.11,<3.13"
# Em ambientes com CPython 3.11.10 e 3.11.16 na mesma prioridade de path,
# o uv 0.12.5 seleciona deterministicamente a point release mais recente.
Para inspecionar qual binário é eleito pelo resolvedor:
# Localiza o executável selecionado conforme os critérios de preferência
uv python find
2. Exportação CycloneDX SBOM com URLs e hashes de distribuição (Preview)
A geração de inventários automatizados no formato CycloneDX é suportada pelo uv como funcionalidade sob a flag de preview. No PR #21131, o exportador CycloneDX foi atualizado para emitir, por padrão, as URLs de distribuição e os hashes criptográficos dos artefatos que possuam hash registrado no arquivo de trava (uv.lock).

Ao gerar o SBOM de um projeto:
# Exporta o SBOM em formato CycloneDX contendo hashes e URLs de artefatos (preview)
uv export --format cyclonedx1.5 --output-file sbom.json
Limites de comportamento e escopo:
- Inclusão Condicionada: As URLs de distribuição e os hashes criptográficos (
SHA-256) são emitidos para os artefatos cujo hash está explicitamente registrado nouv.lock. - Omissão com
--no-hashes: Caso o comando seja invocado com o modificador--no-hashes, ouvomite a inclusão dos hashes no manifesto exportado.
Exemplo de fragmento de componente emitido no arquivo sbom.json:
{
"bomFormat": "CycloneDX",
"specVersion": "1.5",
"components": [
{
"type": "library",
"name": "pydantic-core",
"version": "2.27.2",
"externalReferences": [
{
"type": "distribution",
"url": "https://files.pythonhosted.org/packages/b9/e2/.../pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.whl",
"hashes": [
{
"alg": "SHA-256",
"content": "8b5d3c4571932943d2c884511ef5f992383216d008d519bce3d17eead79ce425"
}
]
}
]
}
]
}
3. Redação de credenciais em mensagens de erro de URLs de requisitos
O vazamento acidental de tokens e credenciais em logs de integração contínua é um vetor crítico de risco em ambientes corporativos. O PR #21130 reformulou especificamente o tratamento de mensagens de erro e dicas (hints) em requisitos editáveis inválidos, implementando a redação (redaction) automática de dados de autenticação presentes na URL do requisito.
Se uma URL de requisito com autenticação básica (ex.: https://deploy-token:segredo-corporativo@pypi.empresa.internal/simple/) contiver erro de especificação ou sintaxe editável inválida, o uv 0.12.5 mascara a fração de senha (https://deploy-token:****@pypi.empresa.internal/simple/) preservando o usuário antes de renderizar a mensagem de falha no terminal.

Exemplo de mensagem de erro com credenciais mascaradas:
error: Failed to parse editable requirement: https://deploy-token:****@pypi.empresa.internal/simple/pkg
hint: Editable requirements must be file paths or valid repository URLs.
Escopo da redação: A sanitização comprovada pelo PR #21130 atua diretamente nas mensagens de diagnóstico, dicas e erros de análise sintática de requisitos editáveis, evitando que segredos de repositórios privados sejam transcritos no console de pipelines de CI/CD.
4. Seleção de índices por nome via --index e --default-index (Preview)
Projetos que operam com múltiplos repositórios internos e externos podem adotar o novo recurso de nomenclatura de índices via PR #17455, disponível sob a funcionalidade preview index-by-name. O parâmetro permite apontar índices declarados no arquivo de configuração diretamente pelo identificador legível:
# pyproject.toml ou uv.toml
[[tool.uv.index]]
name = "interno-empresa"
url = "https://pypi.empresa.internal/simple/"
default = true
[[tool.uv.index]]
name = "pypi-oficial"
url = "https://pypi.org/simple/"
Com o suporte a nomes habilitado na prévia, a instalação de dependências específicas pode direcionar explicitamente o índice desejado:
# Utiliza a flag preview index-by-name no uv 0.12.5
uv pip install pacote-proprietario --index interno-empresa --preview-features index-by-name
Roteiro técnico de homologação e validação
Equipes de engenharia podem verificar as alterações do uv 0.12.5 por meio de passos reproduzíveis em seus pipelines:
- Validação de Precedência de Intérpretes: Configure um ambiente com múltiplas versões menores do Python no
$PATHe executeuv python findpara confirmar a preferência automática pela compilação padrão mais recente elegível (PR #21134). - Inspeção de Integridade CycloneDX: Gere o manifesto SBOM com
uv export --format cyclonedx1.5e valide a presença dos blocoshasheseexternalReferencespara os artefatos fixados no lockfile (PR #21131). - Teste de Redação em Requisitos: Teste a declaração de um requisito editável com sintaxe intencionalmente inválida contendo URL com credenciais simuladas e confirme a exibição de
https://deploy-token:****@...na saída de erro (PR #21130).
Instalação e atualização oficial
Para atualizar o binário do uv em sistemas onde o utilitário foi instalado via instalador standalone da Astral, utilize o comando oficial documentado no Guia de Instalação do Astral uv:
# Atualização direta pelo utilitário oficial (instalações standalone)
uv self update
# Verificação do binário atualizado
uv --version
Alternativamente, em ambientes containerizados ou gerenciados por gerenciadores de pacote de sistema, a atualização pode ser executada por meio do script de bootstrap oficial da Astral:
# Instalação / atualização via script oficial da Astral
curl -LsSf https://astral.sh/uv/install.sh | sh
A versão 0.12.5 consolida salvaguardas essenciais para esteiras de build automatizadas, unificando desempenho e controles rigorosos de supply chain.
Fontes e referências oficiais
- Astral
uvv0.12.5 Release Notes (GitHub Releases) - Guia Oficial de Instalação e Atualização do Astral
uv - Repositório Oficial do Astral
uvno GitHub - PR #21138 — Add CPython 3.10.21, 3.11.16, and 3.12.14
- PR #21134 — Prefer newer versions and standard variants when selecting between equally prioritized Python interpreters
- PR #21131 — Include distribution artifact URLs and hashes in CycloneDX SBOM exports by default
- PR #21130 — Redact credentials in requirement URLs and simplify errors/hints for invalid editable requirements
- PR #17455 — Allow --index and --default-index to select configured package indexes by name with index-by-name preview
- Especificação de Segurança SLSA (Supply-chain Levels for Software Artifacts)
- Padrão de Auditoria AICPA SOC 2