“`html
Apresentamos o UV, um gerenciador de pacotes Python extremamente rápido que foi projetado para simplificar a gestão de dependências, ambientes e a execução de projetos Python. Independentemente do seu nível de experiência, o UV pode acelerar seu fluxo de trabalho ao otimizar o gerenciamento de pacotes e garantir a consistência dos seus ambientes de desenvolvimento.
Este artigo explora o que é o UV e demonstra como utilizá-lo para configurar projetos, instalar dependências e executar scripts Python com facilidade. Para facilitar o aprendizado, apresentamos a seguinte agenda:
- Entendimento aprofundado sobre o que é o UV.
- Instalação do UV.
- Configuração de um projeto Python com UV.
- Gerenciamento de dependências usando UV.
- Execução de scripts Python com UV.
- Exemplo prático: Projeto de Web Scraper.
- Exemplo prático: Projeto de API Data Fetcher.
- Exploração dos comandos básicos e suas opções.
O que é o UV e Gestão de Versões Python
O UV é uma ferramenta abrangente para gerenciar ambientes, dependências e projetos Python. Ele visa otimizar todo o fluxo de trabalho, desde a instalação e gerenciamento de diferentes versões do Python até a execução de scripts e a construção de projetos.
Uma das funcionalidades centrais do UV é o gerenciamento de versões do Python no seu sistema. Isso é crucial quando você precisa alternar entre diferentes versões (como Python 3.8 e 3.9) para projetos distintos.
Instalando e Gerenciando Versões Python com UV
Para começar a gerenciar as versões do Python, você pode instalá-las utilizando o UV. O comando básico para instalação é:
uv python install [versão]
Para verificar quais versões do Python estão disponíveis para instalação, use:
uv python list
Este comando exibirá todas as versões disponíveis e as que já estão instaladas no seu sistema. Se você não tiver certeza de qual versão está instalada, pode verificar rapidamente:
uv python find
Para garantir que um projeto utilize uma versão específica do Python consistentemente, você pode “fixar” essa versão:
uv python pin [versão]
Caso deseje remover uma versão do Python que não está mais em uso:
uv python uninstall [versão]
O gerenciamento de versões do Python pelo UV assegura que você use a versão correta para cada projeto, evitando problemas de compatibilidade.
Executando Scripts Python com UV
O UV também facilita a execução e o gerenciamento de scripts Python independentes. Isso é ideal para scripts de arquivo único, oferecendo uma maneira simples de executá-los sem a necessidade de configurar manualmente um ambiente virtual.
Para executar um script simples, como um arquivo chamado example.py contendo print("Hello world"), utilize:
uv run example.py
Gerenciamento de Dependências em Scripts
O UV permite adicionar ou remover dependências diretamente associadas a um script específico, garantindo que ele rode com as bibliotecas corretas:
- Para adicionar uma dependência:
uv add [nome_do_script] - Para remover uma dependência:
uv remove [nome_do_script]
Esta funcionalidade de gerenciamento de scripts no UV é focada na simplicidade, tornando a execução e o gerenciamento de dependências para projetos menores muito mais fáceis. Para projetos maiores, o UV oferece comandos para sincronização de ambientes, gerenciamento de dependências e construção de projetos, frequentemente utilizando o arquivo padrão pyproject.toml.
Instalando o UV
Para começar a usar o UV, você precisa instalá-lo no seu sistema. Existem diversas maneiras de fazer isso:
Instalação Standalone (Mac OS/Linux)
Você pode usar o comando curl, ou wget se o curl não estiver disponível:
curl -lsSf https://astral.sh/uv/install.sh | sh
Para instalar uma versão específica (ex: 0.9):
curl -lsSf https://astral.sh/uv/install.sh | sh -s 0.9
Instalação no Windows (PowerShell)
Execute no PowerShell como administrador:
Set-ExecutionPolicy bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://astral.sh/uv/install.ps1'))
Instalação via Pip
Se você já tem o Python (versão maior que 3) instalado e o pip configurado:
pip install uv
Outras Opções de Instalação
- Homebrew (Mac OS):
brew install uv - MacPorts:
sudo port install uv - Winget: Utilize o comando específico para Winget.
- Scoop:
scoop install main/uv - Docker: Puxe a imagem mais recente:
docker pull astralsh/uv
Projeto Prático 1: Web Scraper com UV
Vamos simular a configuração de um web scraper usando as bibliotecas requests e beautifulsoup4, gerenciando o ambiente com o UV.
Configuração Inicial do Projeto
- Crie e navegue para o diretório do projeto:
mkdir web_scraper_projectcd web_scraper_project - Inicialize o projeto UV:
uv init example
Isso criará a estrutura básica, incluindo main.py e o arquivo de metadados do projeto, pyproject.toml.
Adicionando e Gerenciando Dependências
Adicione as dependências necessárias:
uv add requests beautifulsoup4
Internamente, o UV adiciona estas bibliotecas ao seu arquivo pyproject.toml e as baixa para o ambiente do projeto. Verificando o pyproject.toml, você verá beautifulsoup4 e requests listados como dependências.
Executando Comandos de Projeto
Você pode executar verificações de formatação e estilo usando ferramentas como ruff, se adicionada:
uv run check
Para garantir a reprodutibilidade exata das versões das dependências, utilize o comando de lock:
uv lock
Isso gera o arquivo uv.lock, que congela as versões exatas das dependências (incluindo as transitivas).
Em seguida, sincronize o ambiente local com as especificações do lock:
uv sync
O uv sync lê o pyproject.toml, garante que as dependências estejam instaladas (ou as remove se estiverem obsoletas), fazendo com que o ambiente local corresponda exatamente ao arquivo de bloqueio, semelhante ao npm install em outros ecossistemas.
Estrutura de Diretórios Criada pelo UV
A estrutura gerada inclui:
.venv: Contém o ambiente virtual com os pacotes instalados (comoruff).- Dentro de
.venv/Scripts(ou similar): Arquivos comoactivate.bat(para ativar o ambiente) epython.exe. pyproject.toml: Arquivo de configuração para gerenciar dependências e configurações do projeto..gitignore: Arquivo para ignorar diretórios como o ambiente virtual.
Estrutura do Código Python (web_scraper_project/main.py)
Para este exemplo, criamos um arquivo scraper.py para buscar dados de uma API:
uv add requests beautifulsoup4 (Se ainda não estiverem adicionadas)
Conteúdo de scraper.py:
import requests
from bs4 import BeautifulSoup
# 1. Buscar a página web
response = requests.get("https://example.com")
# 2. Parsear o conteúdo HTML
soup = BeautifulSoup(response.text, "html.parser")
# 3. Encontrar todas as tags H1
h1_tags = soup.find_all("h1")
# 4. Imprimir o texto de cada tag H1
for tag in h1_tags:
print(tag.text)
Executando o script:
uv run scraper.py
A saída esperada é o conteúdo da tag H1 do site de exemplo: "Example Domain".
Congelando Requisitos
Para garantir que outros desenvolvedores possam replicar o ambiente, compile as dependências em um arquivo requirements.txt usando o UV com suporte a PEP 621:
uv pip compile --universal --output-file requirements.txt requirements.in
Isso exige que você primeiro crie o arquivo de origem requirements.in listando as dependências de nível superior (ex: requests).
Para sincronizar um ambiente com base neste arquivo congelado:
uv pip sync requirements.txt
Projeto Prático 2: API Data Fetcher com UV
Neste projeto, simulamos a obtenção de dados de um API público (JSONPlaceholder), processamos as informações e as salvamos em um arquivo CSV.
Configuração Inicial do Projeto de API
- Crie um novo diretório e navegue até ele:
mkdir API_data_fetchercd API_data_fetcher - Inicialize o projeto UV:
uv init - Crie um ambiente virtual e ative-o:
uv venv createuv venv activate - Adicione a dependência necessária (
requests):uv add requests
Arquivo de Execução (fetch_and_export.py)
Este script faz uma requisição GET para buscar dados de usuários do JSONPlaceholder e os salva em users.csv, incluindo Nome, Email e Cidade.
import requests
import csv
# URL do endpoint da API
URL = "https://jsonplaceholder.typicode.com/users"
if response.status_code == 200:
users = response.json()
with open("users.csv", "w", newline="") as csvfile:
writer = csv.writer(csvfile)
# Escreve o cabeçalho
writer.writerow(["name", "email", "city"])
# Itera sobre os dados e escreve as linhas
for user in users:
name = user.get("name")
email = user.get("email")
city = user.get("address", {}).get("city")
writer.writerow([name, email, city])
print("Data saved to users.csv file.")
else:
print(f"Error retrieving data. Status code: {response.status_code}")
Executando o script com UV:
uv run fetch_and_export.py
O resultado é o arquivo users.csv populado com os dados extraídos da API, demonstrando a facilidade com que o UV gerencia as dependências necessárias para rodar o código em um ambiente isolado.
Comandos Básicos e Opções do UV
O UV oferece um conjunto robusto de comandos para gerenciar seu ambiente de desenvolvimento. Abaixo, exploramos alguns dos comandos centrais e suas opções:
Comandos Principais
uv auth: Gerencia autenticação para serviços (login, logout, token).uv login: Faz login em um serviço.uv logout: Faz logout de um serviço.uv token: Exibe o token de autenticação de um serviço.uv dir: Mostra o caminho para o diretório de credenciais.uv run [comando/script]: Executa um comando ou script em um ambiente isolado gerenciado pelo UV.uv init: Inicializa um novo projeto, configurando a estrutura de diretórios e criando arquivos comopyproject.toml.uv add [dependência]: Adiciona dependências ao projeto.uv remove [dependência]: Remove dependências do projeto (similar apip uninstall).uv version: Atualiza as versões das dependências do projeto.uv sync: Sincroniza o ambiente para corresponder às dependências especificadas no arquivo de lock (semelhante apip install -r requirements.txt).uv lock: Cria ou atualiza o arquivouv.lock, congelando as versões exatas das dependências.uv export: Exporta o arquivo de lock para um formato alternativo.uv tree: Exibe a árvore de dependências do projeto para visualização da estrutura.uv format: Formata o código Python do projeto (semelhante ao AutoPEP8).uv tool [ferramenta]: Instala e executa ferramentas de linha de comando fornecidas por pacotes Python (ex:uv tool pycows hello world).uv python: Gerencia instalações de versões Python.uv pip: Interface compatível compip, mas com recursos avançados como resolução independente de plataforma.uv venv: Cria e gerencia ambientes virtuais.uv build: Constrói pacotes Python em distribuições de código-fonte e wheels.uv publish: Envia distribuições para índices de pacotes Python (como PyPI).uv cache: Gerencia o cache de dependências baixadas.uv self: Gerencia o próprio executável do UV (atualização, verificação de versão).uv help: Exibe a documentação para qualquer comando UV.
Opções Comuns de Linha de Comando
Diversas opções podem ser usadas com os comandos do UV para customizar seu comportamento:
--allow-insecure-host: Permite conexões com hosts inseguros, desabilitando a verificação SSL (usar com cautela).--cache-dir: Especifica o diretório do cache para armazenar credenciais e dados.--color [auto|always|never]: Controla o uso de cores na saída do terminal.--config-file: Especifica um arquivo de configuração customizado.--directory: Altera o diretório de trabalho antes de executar o comando.--no-cache: Desabilita o uso do cache, optando por arquivos temporários.--offline: Desabilita o acesso à rede, usando apenas dados em cache localmente.--username/--password: Utilizado para fornecer credenciais para processos de autenticação.--keyring-provider [disabled|subprocess]: Define como as credenciais devem ser buscadas (subprocess usa keyring, disabled o ignora).--native-tls: Permite carregar certificados TLS nativamente das lojas de certificados do sistema operacional.--no-config: Evita a descoberta de arquivos de configuração como.toml.--no-python-downloads: Desabilita o download de versões do Python.--quiet: Habilita um modo silencioso, sem saída de log no console.--token: Usado para fornecer um token de autenticação para um serviço.--verbose: Fornece uma saída detalhada e granular (pode ser complementado pela variável de ambienteRUSTY_LOG).
Perguntas Frequentes
- O que é o principal objetivo da ferramenta UV em desenvolvimento Python?
O objetivo principal é gerenciar dependências, ambientes e pacotes Python de forma eficiente e rápida, otimizando o fluxo de trabalho do desenvolvedor. - Como posso garantir que meu projeto use uma versão específica do Python com UV?
Você pode usar o comandouv python pin [versão]para fixar a versão desejada para o projeto atual. - Qual a melhor forma de garantir a reprodutibilidade do ambiente para outros usuários?
Utilizeuv lockpara gerar um arquivouv.lockcom versões exatas de todas as dependências e, em seguida, faça com que outros usuários executemuv sync. - É possível instalar o UV sem usar os scripts de shell nativos?
Sim, é possível instalá-lo usando gerenciadores de pacotes comopip(pip install uv), Homebrew, ou através de containers Docker.
“`






