pip, uv y pyproject.toml: gestión moderna de dependencias
pip es el gestor histórico; uv es el futuro (100x más rápido, escrito en Rust). pyproject.toml reemplaza requirements.txt y setup.py con un único archivo declarativo.
pip install y requirements.txt
pip es el gestor de paquetes de Python incluido en la instalación estándar. requirements.txt es el archivo tradicional para declarar dependencias. Sencillo y universal, aunque limitado.
# Comandos pip esenciales (en la terminal, no en Python)
#
# Instalar un paquete
# pip install requests
#
# Instalar una versión específica
# pip install requests==2.31.0
#
# Instalar desde requirements.txt
# pip install -r requirements.txt
#
# Generar requirements.txt desde el entorno actual
# pip freeze > requirements.txt
#
# Ver paquetes instalados
# pip list
#
# Actualizar un paquete
# pip install --upgrade requests
#
# Desinstalar
# pip uninstall requests
# Ejemplo de requirements.txt:
# requests==2.31.0
# pydantic>=2.0,<3.0
# python-dotenv~=1.0
# pytest==7.4.0 # solo para desarrolloNunca instales paquetes globalmente con sudo pip install. Usa siempre un entorno virtual (python -m venv .venv y luego source .venv/bin/activate). Cada proyecto tiene sus propias dependencias aisladas.
uv — instalación y comandos básicos
uv es un gestor de paquetes y proyectos Python escrito en Rust. Reemplaza pip, pip-tools, virtualenv y parte de poetry con una sola herramienta, ejecutando operaciones hasta 100 veces más rápido.
# Instalar uv (una sola vez en tu sistema)
# curl -LsSf https://astral.sh/uv/install.sh | sh
# o en macOS: brew install uv
# --- Comandos uv equivalentes a pip ---
# Crear un nuevo proyecto (genera estructura + pyproject.toml)
# uv init mi-proyecto
# cd mi-proyecto
# Añadir dependencias
# uv add requests
# uv add "pydantic>=2.0"
# uv add --dev pytest ruff # dependencias de desarrollo
# Instalar todas las dependencias del proyecto
# uv sync
# Ejecutar un script con el entorno del proyecto
# uv run python main.py
# uv run pytest
# Eliminar una dependencia
# uv remove requests
# Actualizar todas las dependencias
# uv lock --upgrade
# Ver dependencias del proyecto
# uv treeCon uv python install 3.13 puedes instalar versiones de Python sin herramientas externas. uv python pin 3.12 fija la versión de Python para el proyecto actual.
pyproject.toml — dependencias y metadata
pyproject.toml es el estándar moderno (PEP 517/518/621) que reemplaza setup.py, setup.cfg y requirements.txt en un único archivo declarativo. uv init lo genera automáticamente.
# pyproject.toml — ejemplo completo para un proyecto real
# [project] — metadata del paquete (PEP 621)
# name = "mi-proyecto"
# version = "0.1.0"
# description = "Una aplicación Python moderna"
# readme = "README.md"
# requires-python = ">=3.11"
# license = { text = "MIT" }
# authors = [
# { name = "Fernando Herrera", email = "fer@ejemplo.com" }
# ]
# keywords = ["python", "ejemplo"]
# Dependencias de producción
# dependencies = [
# "requests>=2.31",
# "pydantic>=2.0,<3.0",
# "python-dotenv>=1.0",
# ]
# Dependencias de desarrollo (opcional-dependencies)
# [project.optional-dependencies]
# dev = [
# "pytest>=7.4",
# "ruff>=0.1",
# "mypy>=1.5",
# ]
# Configuración de ruff (linter + formateador)
# [tool.ruff]
# line-length = 88
# target-version = "py311"
# Configuración de mypy (type checker)
# [tool.mypy]
# python_version = "3.11"
# strict = trueEntornos virtuales con uv venv
uv crea y gestiona entornos virtuales automáticamente cuando usas uv run o uv sync. También puedes crearlos manualmente para compatibilidad con otras herramientas.
# Flujo completo de un proyecto nuevo con uv:
#
# 1. Crear el proyecto
# uv init calculadora
# cd calculadora
#
# Estructura generada:
# calculadora/
# .python-version ← versión de Python fijada
# pyproject.toml ← metadata y dependencias
# README.md
# main.py ← punto de entrada generado
# .venv/ ← entorno virtual (creado en el primer uv run/sync)
#
# 2. Añadir dependencias
# uv add httpx pydantic
# uv add --dev pytest ruff
#
# 3. uv.lock se genera automáticamente — equivale a requirements.txt con hashes
# El lockfile garantiza reproducibilidad exacta en todos los entornos
#
# 4. Ejecutar el proyecto
# uv run python main.py
# uv run pytest
#
# 5. Crear entorno virtual manualmente (para uso con editores)
# uv venv # crea .venv/
# source .venv/bin/activate # activar (Linux/macOS)
# .venv\Scripts\activate # activar (Windows)| pip + venv | uv |
|---|---|
| python -m venv .venv source .venv/bin/activate pip install requests | uv init uv add requests |
| pip freeze > requirements.txt (manual) | uv.lock generado automáticamente |
| Velocidad: ~10s para instalar Django | Velocidad: ~0.3s para instalar Django (caché) |