Kodokon kodokon.com

Entornos virtuales, pip y un proyecto limpio

Aísla cada proyecto en su propio venv, fija las versiones de las dependencias y adopta una estructura de proyecto reproducible.

8 min · 3 preguntas

Abrir esta lección en Kodokon

Instalar las dependencias de todos tus proyectos en el mismo intérprete lleva directo a un conflicto de versiones: el proyecto A necesita requests 2.31, el proyecto B una versión incompatible. El entorno virtual (venv) aísla cada proyecto: su intérprete, su pip, sus paquetes. Es la práctica profesional no negociable - un proyecto, un entorno, recreable de forma idéntica en cualquier máquina.

BASH
python -m venv .venv
source .venv/bin/activate
# On Windows:
# .venv\Scripts\activate
python -m pip install requests
python -m pip list
Crear, activar y poblar un entorno virtual

Para que la instalación sea reproducible, fija las versiones. pip freeze exporta el entorno entero, dependencias transitivas incluidas, con versiones exactas: máxima reproducibilidad, actualizaciones laboriosas. El enfoque moderno separa las dos necesidades: las dependencias directas declaradas en pyproject.toml con restricciones flexibles, y un archivo de bloqueo generado para la instalación exacta. A la escala de un proyecto pequeño, requirements.txt sigue siendo perfectamente respetable.

BASH
python -m pip freeze > requirements.txt
# On another machine:
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
Congelar y luego reconstruir el entorno de forma idéntica

En cuanto a la estructura, el src layout es la referencia: el código vive en src/<package>/, las pruebas en tests/, la configuración en pyproject.toml. El sentido de la carpeta src no es estético: impide importar por accidente el paquete local desde el directorio actual, lo que ocultaría errores de empaquetado - tus pruebas se ejecutan contra el paquete realmente instalado. Durante el desarrollo, pip install -e . instala el proyecto en modo editable.

BASH
mkdir -p src/billing tests
touch src/billing/__init__.py
touch src/billing/invoices.py
touch tests/test_invoices.py
touch pyproject.toml README.md .gitignore
echo ".venv/" >> .gitignore
Esqueleto de un proyecto en src layout

Prueba de conocimientos

Comprueba que has retenido los puntos clave de esta lección.

  1. ¿Qué garantiza un entorno virtual?
    • Una ejecución más rápida del código Python
    • Dependencias aisladas para cada proyecto
    • La compatibilidad entre versiones de Python
    • El cifrado de los paquetes instalados
  2. ¿Qué contiene un requirements.txt generado por pip freeze?
    • Solo tus dependencias directas
    • Todas las dependencias instaladas, versiones exactas incluidas
    • La lista de paquetes disponibles en PyPI
  3. ¿Por qué preferir python -m pip install antes que pip install?
    • Es la única sintaxis aceptada dentro de un venv
    • El comando apunta al pip del intérprete activo
    • La instalación es más rápida