uv: Alternativa Rápida ao conda e venv

uv: Alternativa Rápida ao conda e venv

Aviso: Este post foi traduzido para o português usando um modelo de tradução automática. Por favor, me avise se encontrar algum erro.

Até agora, eu tenho controlado meus ambientes com conda. Mas há algum tempo venho lendo muito sobre poetry, mas principalmente sobre uv. Quais são as vantagens do uv? A velocidade. uv é implementado em Rust, por isso gerencia os ambientes e instala pacotes de uma maneira extremamente rápida.

Na tabela a seguir, é mostrada a diferença de velocidade entre diferentes gerenciadores de pacotes. Fonte: LLMs-from-scratch/setup/01_optional-python-setup-preferences/native-uv.md

Comando Velocidade
conda install <pkg> lento
uv pip install <pkg> entre 5 e 10 vezes mais rápido que o anterior
uv add <pkg> entre 2 e 5 vezes mais rápido que o anterior

Vendo a tabela, vale bastante a pena usar uv. Então vamos ver como criar um ambiente e instalar pacotes com uv.

Download do repositóriolink image 13

Como eu disse, estou usando LLMs-from-scratch/setup/01_optional-python-setup-preferences[native-uv.md como fonte, então vamos baixar o repositório, instalar o ambiente que ele propõe e ver como executar um script

Usamos --depth 1 para baixar apenas o último commit do repositório e que seja clonado mais rapidamente, não nos interessa o histórico.

	
< > Input
Python
git clone https://github.com/rasbt/LLMs-from-scratch.git --depth 1
Copied
>_ Output
			
Cloning into 'LLMs-from-scratch'...
remote: Enumerating objects: 260, done.
remote: Counting objects: 100% (260/260), done.
remote: Compressing objects: 100% (226/226), done.
remote: Total 260 (delta 61), reused 121 (delta 22), pack-reused 0 (from 0)
Receiving objects: 100% (260/260), 1.64 MiB | 6.94 MiB/s, done.
Resolving deltas: 100% (61/61), done.

Agora vamos ao repositório que baixamos

	
< > Input
Python
cd LLMs-from-scratch
Copied

Instalar uvlink image 14

Se estamos em macOS ou Linux, podemos instalar através do comando

curl -LsSf https://astral.sh/uv/install.sh | sh

Se estamos no Windows

curl -LsSf https://astral.sh/uv/install.sh | sh

Criar ambientelink image 15

Se fizermos um ls podemos ver que há um arquivo chamado pyproject.toml, esse será o arquivo que o uv usará para criar o ambiente.

	
< > Input
Python
ls
Copied
>_ Output
			
2025-03-10-uv.ipynb appendix-D ch04 pyproject.toml
CITATION.cff appendix-E ch05 requirements.txt
LICENSE.txt ch01 ch06 setup
README.md ch02 ch07
appendix-A ch03 pixi.toml

Então vamos ver o que tem no arquivo

	
< > Input
Python
cat pyproject.toml
Copied
>_ Output
			
[project]
name = "llms-from-scratch"
version = "0.1.0"
description = "Implement a ChatGPT-like LLM in PyTorch from scratch, step by step"
readme = "README.md"
requires-python = "&gt;=3.10"
dependencies = [
"torch&gt;=2.3.0",
"jupyterlab&gt;=4.0",
"tiktoken&gt;=0.5.1",
"matplotlib&gt;=3.7.1",
"tensorflow&gt;=2.18.0",
"tqdm&gt;=4.66.1",
"numpy&gt;=1.26,&lt;2.1",
"pandas&gt;=2.2.1",
"pip&gt;=25.0.1",
]
[tool.setuptools.packages]
find = {}
[tool.uv.sources]
llms-from-scratch = { workspace = true }
[dependency-groups]
dev = [
"llms-from-scratch",
]
[tool.ruff]
line-length = 140
[tool.ruff.lint]
exclude = [".venv"]
# Ignored rules (W504 removed)
ignore = [
"C406", "E226", "E402", "E702", "E703",
"E722", "E731", "E741"
]

Como pode ser visto, há dados como o nome, versão, etc, e as dependências, que são os pacotes que vamos instalar.

Para criar o ambiente usamos o comando uv sync, além de adicionar a flag --dev para instalar também as dependências de desenvolvimento e a flag --python para especificar a versão do Python que queremos usar.

	
< > Input
Python
uv sync --dev --python 3.11
Copied
>_ Output
			
Using CPython 3.11.11
Creating virtual environment at: .venv
Resolved 160 packages in 175ms
Installed 139 packages in 1.46s
+ absl-py==2.1.0
+ anyio==4.8.0
+ appnope==0.1.4
+ argon2-cffi==23.1.0
+ argon2-cffi-bindings==21.2.0
+ arrow==1.3.0
+ asttokens==3.0.0
+ astunparse==1.6.3
+ async-lru==2.0.4
+ attrs==25.1.0
+ babel==2.17.0
+ beautifulsoup4==4.13.3
+ bleach==6.2.0
+ certifi==2025.1.31
+ cffi==1.17.1
+ charset-normalizer==3.4.1
...
+ tzdata==2025.1
+ uri-template==1.3.0
+ urllib3==2.3.0
+ wcwidth==0.2.13
+ webcolors==24.11.1
+ webencodings==0.5.1
+ websocket-client==1.8.0
+ werkzeug==3.1.3
+ wheel==0.45.1
+ wrapt==1.17.2

Ele criou o ambiente e instalou os pacotes de uma maneira extremamente rápida

Além disso, se voltarmos a fazer ls agora veremos uma nova pasta chamada .venv, essa é a pasta do ambiente virtual.

	
< > Input
Python
ls -a
Copied
>_ Output
			
. CITATION.cff ch02 pyproject.toml
.. LICENSE.txt ch03 requirements.txt
.git README.md ch04 setup
.github appendix-A ch05 uv.lock
.gitignore appendix-D ch06
.venv appendix-E ch07
2025-03-10-uv.ipynb ch01 pixi.toml

Adicionar pacoteslink image 16

Se quisermos adicionar pacotes ao nosso ambiente que não estão no arquivo pyproject.toml, podemos fazer isso com o comando uv add <pkg>.

Por exemplo, se fizermos cat pyproject.toml | grep dotenv veremos que não está instalado o pacote python-dotenv.

	
< > Input
Python
cat pyproject.toml | grep dotenv
Copied

Então adicionamos o pacote

	
< > Input
Python
uv add dotenv
Copied
>_ Output
			
Resolved 162 packages in 92ms
Installed 2 packages in 5ms ░░░░░░░░░░░░░░░░░░░░ [0/0] Installing wheels...
+ dotenv==0.9.9
+ python-dotenv==1.0.1

Se agora executarmos cat pyproject.toml | grep dotenv veremos que foi adicionado ao arquivo.

	
< > Input
Python
cat pyproject.toml | grep dotenv
Copied
>_ Output
			
"dotenv&gt;=0.9.9",

Isso é muito bom, porque agora com esse novo arquivo pyproject.toml podemos recriar o ambiente com o comando uv sync em qualquer outro computador.

Executar um scriptlink image 17

Agora que já temos um ambiente, podemos executar um script de duas maneiras, a primeira com uv run python <script>.py, que ativar o ambiente de .venv e executará o script.

	
< > Input
Python
uv run python setup/02_installing-python-libraries/python_environment_check.py
Copied
>_ Output
			
[OK] Your Python version is 3.11.11
[OK] torch 2.6.0
[OK] jupyterlab 4.3.5
[OK] tiktoken 0.9.0
[OK] matplotlib 3.10.1
[OK] tensorflow 2.18.0
[OK] tqdm 4.67.1
[OK] numpy 2.0.2
[OK] pandas 2.2.3
[OK] psutil 7.0.0

No entanto, se o que queremos é executar o script diretamente com python <script>.py, precisamos ativar o ambiente manualmente primeiro.

	
< > Input
Python
source .venv/bin/activate && python setup/02_installing-python-libraries/python_environment_check.py
Copied
>_ Output
			
[OK] Your Python version is 3.11.11
[OK] torch 2.6.0
[OK] jupyterlab 4.3.5
[OK] tiktoken 0.9.0
[OK] matplotlib 3.10.1
[OK] tensorflow 2.18.0
[OK] tqdm 4.67.1
[OK] numpy 2.0.2
[OK] pandas 2.2.3
[OK] psutil 7.0.0

Perguntas frequentes

Para que servem as flags --dev e --python no comando uv sync --dev --python 3.11?

A flag --python 3.11 indica ao uv sync com qual versão do Python criar o ambiente virtual (no exemplo, cria o .venv usando o CPython 3.11.11), enquanto --dev faz com que também sejam instaladas as dependências listadas na seção [dependency-groups] dev = [...], além das dependências normais do pyproject.toml. A resolução e instalação são extremamente rápidas: no exemplo do post, foram resolvidos 160 pacotes em 175ms e instalados 139 em 1.46s.

Como adicionar um pacote que não está no pyproject.toml usando uv?

Basta usar uv add <pacote>, por exemplo uv add dotenv, que resolve e instala o pacote (e suas dependências, como python-dotenv) diretamente no ambiente .venv. O comando uv add também adiciona automaticamente a entrada correspondente (por exemplo "dotenv>=0.9.9") na seção de dependências do pyproject.toml, permitindo recriar esse mesmo ambiente em outra máquina apenas com uv sync.

Continuar lendo

Últimos posts -->

Você viu esses projetos?

Gymnasia

Gymnasia Gymnasia
Expo
React Native
TypeScript
OpenAI
Anthropic

App de fitness com dois agentes que são executados integralmente no dispositivo, sem backend, de forma que os dados do usuário nunca saem do celular. Um coach conversacional BYOK com adaptadores para OpenAI, Anthropic e Google, 12 tools locais e system prompt remoto com fallback offline, e um subagente de visão que estima macronutrientes a partir de fotos de comida, com leitura de códigos de barras contra o OpenFoodFacts.

LangGraph Deep Researcher

LangGraph Deep Researcher LangGraph Deep Researcher
Python
LangGraph
FastAPI
React
TypeScript
Docker

Sistema multiagente de pesquisa construído com LangGraph. Um supervisor decompõe sua pergunta em tópicos e lança subagentes de busca em paralelo; cada um comprime seus achados antes de repassá-los a um agente redator que escreve o relatório final em markdown com suas fontes. Streaming ao vivo por WebSockets, modelo configurável por papel e chaves de API próprias que nunca são armazenadas no servidor.

Tau

Tau Tau
Python
LangChain

Sistema multiagente de tutoria para estudantes do ensino médio, com um agente por disciplina e material de curso elaborado e validado por uma equipe de professores. Chegou a ser usado com alunos reais em um colégio privado na Espanha e em uma escola de ensino médio na Colômbia.

Ver todos os projetos -->
>_ Disponível para projetos

Tem um projeto com IA?

Vamos conversar.

maximofn@gmail.com

Especialista em Machine Learning e Inteligência Artificial. Desenvolvo soluções com IA generativa, agentes inteligentes e modelos personalizados.

Quer assistir alguma palestra?

Últimas palestras -->

Quer melhorar com essas dicas?

Últimos tips -->

Use isso localmente

Os espaços do Hugging Face nos permitem executar modelos com demos muito simples, mas e se a demo quebrar? Ou se o usuário a deletar? Por isso, criei contêineres docker com alguns espaços interessantes, para poder usá-los localmente, aconteça o que acontecer. Na verdade, se você clicar em qualquer botão de visualização de projeto, ele pode levá-lo a um espaço que não funciona.

Flow edit

Flow edit Flow edit

Edite imagens com este modelo de Flow. Baseado em SD3 ou FLUX, você pode editar qualquer imagem e gerar novas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos os contêineres -->
>_ Disponível para projetos

Tem um projeto com IA?

Vamos conversar.

maximofn@gmail.com

Especialista em Machine Learning e Inteligência Artificial. Desenvolvo soluções com IA generativa, agentes inteligentes e modelos personalizados.

Você quer treinar seu modelo com esses datasets?

short-jokes-dataset

HuggingFace

Dataset com piadas em inglês

Uso: Fine-tuning de modelos de geração de texto humorístico

231K linhas 2 colunas 45 MB
Ver no HuggingFace →

opus100

HuggingFace

Dataset com traduções de inglês para espanhol

Uso: Treinamento de modelos de tradução inglês-espanhol

1M linhas 2 colunas 210 MB
Ver no HuggingFace →

netflix_titles

HuggingFace

Dataset com filmes e séries da Netflix

Uso: Análise de catálogo Netflix e sistemas de recomendação

8.8K linhas 12 colunas 3.5 MB
Ver no HuggingFace →
Ver mais datasets -->