Anexo: manejo de paquetes con pip
Python viene con una librería estándar muy completa, pero la comunidad mantiene además miles de librerías externas. pip es la herramienta que las descarga y las instala por ti.
Qué es pip
pip es el gestor de paquetes oficial de Python. Un paquete es código escrito por otra persona y publicado para que puedas reutilizarlo sin tener que programarlo tú.
Si vienes de Linux, la analogía es directa: pip es a Python lo que apt es a Ubuntu. Igual que apt install vlc descarga e instala VLC, pip install requests descarga e instala la librería requests para que puedas importarla en tu código.
pip viene incluido con Python. Para comprobarlo:
$ pip --version
pip 24.0 from /home/usuario/.venv/lib/python3.12/site-packages/pip (python 3.12)
Nota: en sistemas donde conviven Python 2 y Python 3 puedes encontrar pip apuntando al Python 2 y pip3 al Python 3. En Ubuntu moderno solo existe Python 3 y los dos comandos son equivalentes. Si trabajas dentro de un entorno virtual activo, usa siempre pip sin el 3, ya apunta al intérprete correcto.
De dónde vienen los paquetes: PyPI
pip descarga los paquetes de PyPI (Python Package Index), el repositorio oficial de la comunidad. Es un sitio público donde cualquiera puede publicar librerías, alojado en pypi.org.
Tiene más de medio millón de paquetes: librerías para hacer peticiones HTTP, frameworks web, herramientas de análisis de datos, machine learning, automatización, juegos, scraping... cualquier cosa que se te ocurra.
Cuando ejecutas pip install requests, pip va a PyPI, busca el paquete, lo descarga y lo instala. Todo automático.
Nota: PyPI es a Python lo que la App Store es al móvil, con una diferencia importante: cualquiera puede publicar. Antes de instalar un paquete poco conocido en un proyecto serio, comprueba quién lo mantiene, cuándo fue su última versión y cuántas descargas tiene.
Instalar un paquete
Antes de nada: instala siempre dentro de un entorno virtual activo. Si necesitas refrescar cómo se crea y se activa, vuelve al anexo de entornos virtuales.
# primero activa el entorno virtual
$ source .venv/bin/activate
# instala el paquete
(.venv) $ pip install requests
Verás algo así:
Collecting requests
Downloading requests-2.31.0-py3-none-any.whl (62 kB)
Collecting charset-normalizer
...
Successfully installed certifi-2026.4.22 charset-normalizer-3.4.7 idna-3.13 requests-2.31.0 urllib3-2.6.3
Fíjate que pip ha instalado varios paquetes aunque tú solo pediste uno. Eso es porque requests necesita otras librerías para funcionar, y pip las descarga automáticamente. A esas se les llama dependencias.
Instalar varios paquetes a la vez
Puedes pasarle varios nombres separados por espacios:
$ pip install requests flask pillow
Paquetes habituales para empezar
No tienes que conocerlos todos, pero estos nombres aparecen muy a menudo en tutoriales y proyectos reales:
| Paquete | Para qué sirve |
|---|---|
requests | Hacer peticiones HTTP: descargar páginas, llamar a APIs. |
httpx | Similar a requests pero moderno y con soporte asíncrono. |
flask | Crear aplicaciones web ligeras. |
fastapi | Crear APIs HTTP modernas con tipado y validación. |
pillow | Manipular imágenes: redimensionar, convertir, aplicar filtros. |
pandas | Analizar datos en forma de tabla. |
numpy | Operaciones matemáticas y arrays numéricos eficientes. |
rich | Imprimir texto con colores, tablas y estilos en la terminal. |
beautifulsoup4 | Extraer datos de páginas HTML (scraping). |
python-dotenv | Leer variables de configuración desde un archivo .env. |
Buscar paquetes
La forma más cómoda es ir directamente a pypi.org y buscar ahí: encontrarás la descripción, las versiones, la documentación enlazada y las estadísticas de descargas.
Desde la terminal puedes ver las versiones publicadas de un paquete concreto:
$ pip index versions requests
requests (2.31.0)
Available versions: 2.31.0, 2.30.0, 2.29.0, 2.28.2, 2.28.1, ...
Nota: cuando un libro o tutorial te diga "instala la librería X", el nombre que pasas a pip install es casi siempre exactamente ese nombre en minúsculas. Si no funciona, búscalo en PyPI: a veces el nombre del paquete y el del módulo difieren (por ejemplo, instalas beautifulsoup4 pero en el código importas bs4).
Ver qué tienes instalado
$ pip list
Package Version
------------------ ---------
certifi 2026.4.22
charset-normalizer 3.4.7
idna 3.13
requests 2.31.0
urllib3 2.6.3
Información detallada de un paquete
$ pip show requests
Name: requests
Version: 2.31.0
Summary: Python HTTP for Humans.
Home-page: https://requests.readthedocs.io
Author: Kenneth Reitz
Location: /home/usuario/.venv/lib/python3.12/site-packages
Requires: certifi, charset-normalizer, idna, urllib3
Required-by:
La línea Requires indica de qué depende ese paquete; Required-by, quién depende de él. Las dos son útiles cuando intentas entender por qué hay tantos paquetes instalados que tú nunca pediste explícitamente.
Ver y aplicar actualizaciones
Para listar lo que tiene versión más nueva disponible:
$ pip list --outdated
Package Version Latest Type
---------- -------- -------- -----
requests 2.28.0 2.31.0 wheel
Para actualizar uno concreto:
$ pip install --upgrade requests
Para actualizar el propio pip:
$ pip install --upgrade pip
Desinstalar
$ pip uninstall requests # pide confirmación
$ pip uninstall -y requests # sin confirmación
Nota: desinstalar un paquete no desinstala sus dependencias. Si instalaste requests y lo quitas, urllib3, idna y certifi siguen ahí. Cuando el entorno se llena de paquetes residuales, lo más limpio es borrar el entorno entero y recrearlo desde el requirements.txt.
Versiones de paquetes
Los paquetes evolucionan: a veces un tutorial dice "usa la versión X" porque la X+1 cambió algo. Con pip puedes pedir una versión concreta o un rango:
$ pip install requests==2.28.0 # exactamente esta versión
$ pip install "requests>=2.28" # esta o cualquiera más nueva
$ pip install "requests>=2.28,<3" # dentro de este rango
$ pip install "requests~=2.28" # equivalente a >=2.28,<3
Las versiones siguen el formato MAYOR.MENOR.PARCHE (por ejemplo, 2.31.0). Es lo que se conoce como semver (semantic versioning):
- Subir el parche (
2.31.0 → 2.31.1) corrige bugs sin cambiar el comportamiento. - Subir la menor (
2.31 → 2.32) añade funcionalidades manteniendo compatibilidad. - Subir la mayor (
2.x → 3.x) puede romper cosas que ya funcionaban: léete las notas del proyecto antes de actualizar.
pip y los entornos virtuales
Este es el punto que más confusión genera al empezar:
pip instala en el Python que esté activo en ese momento. Si tienes un entorno virtual activo, instala ahí. Si no hay ninguno activo, intenta instalar en el Python del sistema, y en Ubuntu moderno eso está bloqueado por defecto.
# MAL: sin entorno activo en Ubuntu
$ pip install requests
error: externally-managed-environment
# BIEN: con entorno activo
$ source .venv/bin/activate
(.venv) $ pip install requests
Successfully installed requests-2.31.0
Para saber dónde está instalando pip en este momento:
$ pip --version
pip 24.0 from /home/usuario/proyecto/.venv/lib/python3.12/site-packages/pip (python 3.12)
La ruta que muestra es donde instala. Si ves .venv, vas bien. Si ves /usr/lib/python, estás apuntando al sistema y la instalación fallará (o, peor, contaminará el Python global).
requirements.txt: congelar dependencias
Cuando un proyecto crece, conviene dejar por escrito qué paquetes necesita y en qué versiones. El convenio en Python es un archivo de texto plano llamado requirements.txt:
# desde el entorno activo, exporta el estado actual
(.venv) $ pip freeze > requirements.txt
El archivo resultante tiene un paquete por línea con su versión exacta:
certifi==2026.4.22
charset-normalizer==3.4.7
idna==3.13
requests==2.31.0
urllib3==2.6.3
Para reproducir el entorno en otra máquina (o más adelante en la tuya, después de borrar el .venv):
$ python3 -m venv .venv
$ source .venv/bin/activate
(.venv) $ pip install -r requirements.txt
Nota: el requirements.txt sí se sube a git (a diferencia de la carpeta .venv/, que no). Es lo que permite que cualquiera que clone el repo recree exactamente el mismo entorno que tú estás usando.
Referencia rápida
| Qué quieres hacer | Comando |
|---|---|
| Instalar un paquete | pip install requests |
| Instalar versión concreta | pip install requests==2.31.0 |
| Instalar un rango | pip install "requests>=2.28,<3" |
| Instalar varios a la vez | pip install requests flask pillow |
| Listar paquetes instalados | pip list |
| Información de un paquete | pip show requests |
| Ver paquetes desactualizados | pip list --outdated |
| Actualizar un paquete | pip install --upgrade requests |
Actualizar pip | pip install --upgrade pip |
| Desinstalar | pip uninstall requests |
| Ver dónde está instalando | pip --version |
| Exportar dependencias | pip freeze > requirements.txt |
| Instalar desde requirements | pip install -r requirements.txt |
| Ver versiones publicadas | pip index versions requests |