Apuntes sobre Python

La indentación no es estilo: es sintaxis.

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:

PaquetePara qué sirve
requestsHacer peticiones HTTP: descargar páginas, llamar a APIs.
httpxSimilar a requests pero moderno y con soporte asíncrono.
flaskCrear aplicaciones web ligeras.
fastapiCrear APIs HTTP modernas con tipado y validación.
pillowManipular imágenes: redimensionar, convertir, aplicar filtros.
pandasAnalizar datos en forma de tabla.
numpyOperaciones matemáticas y arrays numéricos eficientes.
richImprimir texto con colores, tablas y estilos en la terminal.
beautifulsoup4Extraer datos de páginas HTML (scraping).
python-dotenvLeer 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 hacerComando
Instalar un paquetepip install requests
Instalar versión concretapip install requests==2.31.0
Instalar un rangopip install "requests>=2.28,<3"
Instalar varios a la vezpip install requests flask pillow
Listar paquetes instaladospip list
Información de un paquetepip show requests
Ver paquetes desactualizadospip list --outdated
Actualizar un paquetepip install --upgrade requests
Actualizar pippip install --upgrade pip
Desinstalarpip uninstall requests
Ver dónde está instalandopip --version
Exportar dependenciaspip freeze > requirements.txt
Instalar desde requirementspip install -r requirements.txt
Ver versiones publicadaspip index versions requests
TOP