Python
Tutorial Python: Gestión de dependencias (pip, requirements.txt)
Aprende a gestionar dependencias en Python usando pip y requirements.txt para instalar, actualizar y mantener paquetes eficientemente.
Aprende Python y certifícateInstalación de paquetes con pip
Python cuenta con un ecosistema de paquetes extremadamente rico que extiende sus capacidades básicas. Para gestionar estos paquetes, Python incluye una herramienta llamada pip (Python Package Installer), que permite instalar, actualizar y eliminar paquetes de manera sencilla.
¿Qué es pip?
Pip es el gestor de paquetes estándar de Python que permite instalar y administrar bibliotecas y dependencias adicionales que no vienen en la biblioteca estándar. Desde Python 3.4, pip viene preinstalado con las distribuciones oficiales de Python, lo que facilita enormemente comenzar a trabajar con paquetes externos.
Verificación de pip
Antes de comenzar a instalar paquetes, es recomendable verificar que pip está correctamente instalado y actualizado:
pip --version
Si pip está instalado, verás algo similar a:
pip 23.2.1 from /usr/local/lib/python3.13/site-packages (python 3.13)
Si por alguna razón no tienes pip instalado, puedes instalarlo ejecutando:
python -m ensurepip --upgrade
Actualización de pip
Es una buena práctica mantener pip actualizado a su última versión:
python -m pip install --upgrade pip
Instalación básica de paquetes
La forma más simple de instalar un paquete es mediante el comando pip install
:
pip install nombre-del-paquete
Por ejemplo, para instalar la popular biblioteca de análisis de datos pandas:
pip install pandas
Este comando descargará e instalará la última versión estable de pandas junto con todas sus dependencias.
Instalación de versiones específicas
A veces necesitarás instalar una versión específica de un paquete, lo cual puedes hacer utilizando operadores de comparación:
# Instalar una versión exacta
pip install requests==2.31.0
# Instalar una versión mínima
pip install "requests>=2.30.0"
# Instalar versión menor a una específica
pip install "requests<3.0.0"
# Combinar condiciones
pip install "requests>=2.30.0,<3.0.0"
Instalación desde diferentes fuentes
Pip permite instalar paquetes desde diversas fuentes:
- Desde PyPI (Python Package Index, el repositorio por defecto):
pip install numpy
- Desde un archivo wheel o tarball local:
pip install ./downloads/numpy-1.26.0-cp313-cp313-manylinux_2_17_x86_64.whl
- Desde un repositorio Git:
pip install git+https://github.com/usuario/proyecto.git
- Desde un repositorio Git con una rama, tag o commit específico:
pip install git+https://github.com/usuario/proyecto.git@rama
pip install git+https://github.com/usuario/proyecto.git@v1.0.0
pip install git+https://github.com/usuario/proyecto.git@8a2e4a
Instalación en entornos virtuales
Es una buena práctica instalar paquetes en entornos virtuales para evitar conflictos entre dependencias de diferentes proyectos:
# Crear un entorno virtual
python -m venv mi_entorno
# Activar el entorno virtual (en Windows)
mi_entorno\Scripts\activate
# Activar el entorno virtual (en macOS/Linux)
source mi_entorno/bin/activate
# Instalar paquetes en el entorno virtual
pip install requests
Instalación con opciones adicionales
Pip ofrece varias opciones útiles para personalizar la instalación:
- Instalación silenciosa (sin mostrar la salida de progreso):
pip install --quiet numpy
- Instalación en modo verbose (muestra información detallada):
pip install --verbose numpy
- Instalación sin usar la caché:
pip install --no-cache-dir numpy
- Instalación sin dependencias:
pip install --no-deps nombre-del-paquete
- Instalación con opciones de compilación (útil para paquetes con extensiones C):
pip install nombre-del-paquete --global-option="build_ext" --global-option="--inplace"
Instalación de múltiples paquetes
Puedes instalar varios paquetes a la vez separándolos por espacios:
pip install numpy pandas matplotlib
Instalación de paquetes para desarrollo
Si estás desarrollando un paquete y quieres instalarlo en modo "editable" (para que los cambios en el código fuente se reflejen inmediatamente sin necesidad de reinstalar):
pip install -e .
Este comando debe ejecutarse en el directorio raíz del proyecto donde se encuentra el archivo setup.py
o pyproject.toml
.
Instalación con extras
Algunos paquetes ofrecen funcionalidades opcionales que puedes instalar mediante "extras":
pip install requests[security]
pip install pandas[excel,hdf5]
Instalación con proxy
Si estás detrás de un proxy, puedes configurar pip para usarlo:
pip install --proxy http://usuario:contraseña@servidor:puerto nombre-del-paquete
O establecer variables de entorno:
# En Windows
set HTTP_PROXY=http://usuario:contraseña@servidor:puerto
set HTTPS_PROXY=http://usuario:contraseña@servidor:puerto
# En macOS/Linux
export HTTP_PROXY=http://usuario:contraseña@servidor:puerto
export HTTPS_PROXY=http://usuario:contraseña@servidor:puerto
Instalación desde fuentes alternativas
Por defecto, pip instala paquetes desde PyPI, pero puedes especificar fuentes alternativas:
pip install --index-url https://mi-pypi-privado.com/simple/ nombre-del-paquete
O agregar fuentes adicionales:
pip install --extra-index-url https://mi-pypi-privado.com/simple/ nombre-del-paquete
Verificación de paquetes instalados
Para ver qué paquetes están instalados y sus versiones:
pip list
Para obtener información detallada sobre un paquete específico:
pip show nombre-del-paquete
Por ejemplo:
pip show numpy
Mostrará información como:
Name: numpy
Version: 1.26.0
Summary: Fundamental package for array computing in Python
Home-page: https://numpy.org
Author: Travis E. Oliphant et al.
Author-email:
License: BSD-3-Clause
Location: /usr/local/lib/python3.13/site-packages
Requires:
Required-by: matplotlib, pandas, scipy
Archivo requirements.txt
Cuando trabajamos en proyectos Python de cierta complejidad, gestionar manualmente las dependencias puede convertirse en una tarea tediosa y propensa a errores. El archivo requirements.txt es una solución estándar en el ecosistema Python para documentar y gestionar las dependencias de un proyecto de manera eficiente.
¿Qué es requirements.txt?
Un archivo requirements.txt es simplemente un archivo de texto plano que lista todas las dependencias de un proyecto Python junto con sus versiones específicas. Este archivo sigue una convención ampliamente adoptada en la comunidad Python y sirve como documentación explícita de las dependencias necesarias para que el proyecto funcione correctamente.
Estructura básica
La estructura de un requirements.txt es muy sencilla. Cada línea representa una dependencia con el siguiente formato:
nombre-paquete==versión
Por ejemplo, un archivo requirements.txt típico podría verse así:
requests==2.31.0
numpy==1.26.0
pandas==2.1.1
matplotlib==3.8.0
Especificación de versiones
Existen diferentes formas de especificar las versiones de los paquetes en el archivo requirements.txt:
- Versión exacta: Garantiza reproducibilidad pero puede limitar actualizaciones de seguridad.
requests==2.31.0
- Versión mínima: Permite actualizaciones pero mantiene una base mínima.
requests>=2.31.0
- Rango de versiones: Establece límites inferior y superior.
requests>=2.31.0,<3.0.0
- Compatible con: Permite actualizaciones de parches pero no cambios mayores (siguiendo versionado semántico).
requests~=2.31.0 # Permitirá 2.31.1, 2.31.2, etc., pero no 2.32.0
- Sin especificar versión: Instala la última versión disponible (no recomendado para entornos de producción).
requests
Creación del archivo requirements.txt
Existen dos enfoques principales para crear un archivo requirements.txt:
1. Creación manual
Puedes crear el archivo manualmente listando cada dependencia que tu proyecto necesita:
# requirements.txt
flask==2.3.3
sqlalchemy==2.0.21
python-dotenv==1.0.0
2. Generación automática
Una forma más práctica es generar el archivo automáticamente a partir de las dependencias instaladas en tu entorno actual:
pip freeze > requirements.txt
El comando pip freeze
captura todas las dependencias instaladas en el entorno actual junto con sus versiones exactas. Sin embargo, ten en cuenta que este enfoque incluirá todas las dependencias del entorno, incluso aquellas que no son directamente utilizadas por tu proyecto.
Uso de requirements.txt
El principal uso de requirements.txt es instalar todas las dependencias de un proyecto de una sola vez:
pip install -r requirements.txt
Este comando lee el archivo requirements.txt e instala todos los paquetes listados con las versiones especificadas.
Buenas prácticas
Organización por entornos
Para proyectos más complejos, es común tener diferentes archivos de requisitos para diferentes entornos:
requirements/
base.txt # Dependencias comunes
dev.txt # Dependencias de desarrollo
prod.txt # Dependencias de producción
test.txt # Dependencias para pruebas
Puedes hacer referencia a otros archivos de requisitos usando la sintaxis -r
:
# dev.txt
-r base.txt
pytest==7.4.2
black==23.9.1
flake8==6.1.0
Comentarios y organización
Puedes incluir comentarios y organizar las dependencias para mayor claridad:
# API y comunicación HTTP
requests==2.31.0
httpx==0.25.0
# Análisis de datos
numpy==1.26.0
pandas==2.1.1
matplotlib==3.8.0 # Para visualización
# Herramientas de desarrollo
# Estas dependencias no son necesarias en producción
pytest==7.4.2
black==23.9.1
Dependencias con extras
Puedes especificar extras para paquetes que los ofrecen:
# Con soporte para formatos específicos
pandas[excel,hdf5]==2.1.1
# Con características adicionales de seguridad
requests[security]==2.31.0
Dependencias desde repositorios Git
También puedes incluir dependencias directamente desde repositorios Git:
git+https://github.com/usuario/proyecto.git@v1.0.0
git+https://github.com/usuario/proyecto.git@8a2e4a
Herramientas alternativas
Aunque requirements.txt es el estándar de facto, existen herramientas más avanzadas para la gestión de dependencias:
- pip-tools: Genera requirements.txt a partir de un archivo de alto nivel (requirements.in) y mantiene las dependencias bloqueadas.
pip install pip-tools
pip-compile requirements.in
- Poetry: Una herramienta moderna que maneja dependencias y empaquetado usando pyproject.toml.
[tool.poetry.dependencies]
python = "^3.10"
requests = "^2.31.0"
pandas = "^2.1.1"
- Pipenv: Combina pip y virtualenv, usando un Pipfile para especificar dependencias.
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
requests = "==2.31.0"
pandas = "==2.1.1"
[dev-packages]
pytest = "==7.4.2"
Integración con control de versiones
Es una buena práctica incluir el archivo requirements.txt en el control de versiones (como Git) para que otros desarrolladores puedan reproducir fácilmente el entorno de desarrollo:
# Clonar repositorio
git clone https://github.com/usuario/proyecto.git
# Crear y activar entorno virtual
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
# Instalar dependencias
pip install -r requirements.txt
Actualización de dependencias
Para actualizar las dependencias manteniendo el archivo requirements.txt actualizado:
# Actualizar un paquete específico
pip install --upgrade requests
pip freeze > requirements.txt
# O usar pip-tools para actualizaciones más controladas
pip-compile --upgrade-package requests requirements.in
Verificación de seguridad
Es importante revisar periódicamente las dependencias en busca de vulnerabilidades de seguridad:
# Instalar safety
pip install safety
# Verificar dependencias
safety check -r requirements.txt
También puedes usar herramientas como pip-audit
o integraciones con GitHub Dependabot para automatizar este proceso.
Resolución de conflictos
Cuando trabajas con múltiples dependencias, pueden surgir conflictos de versiones. Herramientas como pip-tools
o Poetry
ofrecen resolución de dependencias más robusta que el simple archivo requirements.txt.
Si encuentras conflictos al instalar desde requirements.txt, puedes intentar:
pip install --no-deps -r requirements.txt
pip check
Esto instalará los paquetes sin sus dependencias y luego verificará la compatibilidad, ayudándote a identificar conflictos específicos.
Actualización y desinstalación
Mantener las dependencias de un proyecto Python actualizadas y gestionar eficientemente los paquetes instalados es una parte fundamental del ciclo de vida del desarrollo. En esta sección, exploraremos cómo actualizar y desinstalar paquetes utilizando pip, así como las mejores prácticas para estas operaciones.
Actualización de paquetes
Cuando trabajamos con proyectos a largo plazo, es común que necesitemos actualizar nuestras dependencias para obtener correcciones de errores, mejoras de rendimiento o nuevas funcionalidades.
Actualizar un paquete específico
Para actualizar un paquete a su versión más reciente:
pip install --upgrade nombre-del-paquete
O usando la forma abreviada:
pip install -U nombre-del-paquete
Por ejemplo, para actualizar la biblioteca requests:
pip install -U requests
Este comando actualizará requests a la última versión disponible, junto con sus dependencias si es necesario.
Actualizar a una versión específica
Si necesitas actualizar a una versión concreta, puedes especificarla:
pip install -U requests==2.31.0
Actualizar múltiples paquetes
Puedes actualizar varios paquetes a la vez:
pip install -U numpy pandas matplotlib
Actualizar todos los paquetes
Aunque pip no ofrece un comando directo para actualizar todos los paquetes, puedes lograrlo combinando varios comandos:
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
En Windows PowerShell:
pip list --outdated --format=freeze | ForEach-Object { $_.split('==')[0] } | ForEach-Object { pip install -U $_ }
Sin embargo, esta práctica debe usarse con precaución, especialmente en entornos de producción, ya que podría romper la compatibilidad entre paquetes.
Actualizar respetando restricciones de versión
Si tienes un archivo requirements.txt con restricciones de versión, puedes actualizar los paquetes respetando esas restricciones:
pip install -U -r requirements.txt
Verificación de paquetes desactualizados
Antes de actualizar, es útil identificar qué paquetes tienen actualizaciones disponibles:
pip list --outdated
Este comando mostrará una tabla con los paquetes desactualizados, sus versiones actuales y las versiones más recientes disponibles:
Package Version Latest Type
---------- -------- -------- -----
numpy 1.24.0 1.26.0 wheel
pandas 1.5.3 2.1.1 wheel
requests 2.28.2 2.31.0 wheel
Para obtener un formato más procesable por scripts:
pip list --outdated --format=json
Desinstalación de paquetes
A medida que evolucionan los proyectos, es posible que algunas dependencias dejen de ser necesarias o deban ser reemplazadas.
Desinstalar un paquete
Para eliminar un paquete instalado:
pip uninstall nombre-del-paquete
Por ejemplo:
pip uninstall requests
Por defecto, pip solicitará confirmación antes de desinstalar. Para evitar esta confirmación:
pip uninstall -y requests
Desinstalar múltiples paquetes
Puedes desinstalar varios paquetes a la vez:
pip uninstall -y numpy pandas matplotlib
Desinstalar paquetes desde un archivo
Si tienes un archivo requirements.txt y quieres desinstalar todos los paquetes listados en él:
pip uninstall -r requirements.txt
Nuevamente, puedes agregar -y
para evitar las confirmaciones:
pip uninstall -y -r requirements.txt
Desinstalar dependencias no utilizadas
Pip no elimina automáticamente las dependencias que fueron instaladas junto con un paquete. Para identificar paquetes que podrían no estar siendo utilizados, puedes usar herramientas como pip-autoremove
:
pip install pip-autoremove
pip-autoremove nombre-del-paquete
Gestión de conflictos y problemas
Solución de problemas de actualización
A veces, las actualizaciones pueden generar conflictos o problemas de compatibilidad:
- Conflictos de dependencias: Cuando diferentes paquetes requieren versiones incompatibles de una misma dependencia.
# Verificar la compatibilidad de los paquetes instalados
pip check
- Problemas de compilación: Algunos paquetes con extensiones en C pueden fallar al actualizarse.
# Forzar la reinstalación ignorando la caché
pip install --no-cache-dir --force-reinstall nombre-del-paquete
- Reversión a una versión anterior: Si una actualización causa problemas, puedes volver a la versión anterior.
pip install nombre-del-paquete==versión-anterior
Limpieza de caché
Pip almacena en caché los paquetes descargados. Para liberar espacio:
pip cache purge
Para ver información sobre la caché:
pip cache info
Estrategias para entornos de producción
En entornos de producción, la actualización de dependencias debe abordarse con mayor cautela:
Pruebas de regresión: Antes de actualizar en producción, ejecuta pruebas exhaustivas en un entorno de staging.
Actualización gradual: Considera actualizar un subconjunto de dependencias a la vez, en lugar de todas simultáneamente.
Control de versiones estricto: Utiliza versiones exactas en tu archivo requirements.txt para producción.
Registro de cambios: Mantén un registro de las actualizaciones realizadas:
# Guardar el estado actual antes de actualizar
pip freeze > requirements.old.txt
# Actualizar
pip install -U nombre-del-paquete
# Guardar el nuevo estado
pip freeze > requirements.new.txt
# Ver diferencias
diff requirements.old.txt requirements.new.txt
Herramientas avanzadas para actualización y mantenimiento
Para proyectos más complejos, considera estas herramientas especializadas:
- pip-tools: Proporciona un flujo de trabajo más controlado para actualizar dependencias.
# Actualizar una dependencia específica en requirements.in
pip-compile --upgrade-package requests requirements.in
- pip-review: Ofrece una interfaz interactiva para revisar y actualizar paquetes.
pip install pip-review
pip-review --interactive
- safety: Verifica vulnerabilidades de seguridad en tus dependencias.
pip install safety
safety check
- pyup: Servicio que monitoriza automáticamente tus dependencias y crea pull requests para actualizarlas.
Actualización y desinstalación en entornos virtuales
Recuerda que las operaciones de actualización y desinstalación afectan al entorno Python activo. Siempre verifica que estás trabajando en el entorno virtual correcto:
# Verificar el entorno Python activo
which python # En Unix/Linux/macOS
where python # En Windows
# Activar el entorno virtual si es necesario
source venv/bin/activate # En Unix/Linux/macOS
venv\Scripts\activate # En Windows
Mejores prácticas
- Mantén un archivo requirements.txt actualizado: Después de actualizar o desinstalar paquetes, actualiza tu archivo requirements.txt.
pip freeze > requirements.txt
Utiliza entornos virtuales: Realiza actualizaciones en entornos aislados para evitar afectar a otros proyectos.
Actualiza con propósito: Actualiza paquetes por razones específicas (seguridad, nuevas funcionalidades) en lugar de hacerlo rutinariamente sin motivo.
Prueba después de actualizar: Ejecuta las pruebas de tu proyecto después de cada actualización significativa.
Revisa los registros de cambios: Antes de actualizar un paquete importante, revisa su registro de cambios para identificar posibles problemas de compatibilidad.
Considera el versionado semántico: Comprende cómo funciona el versionado semántico (MAJOR.MINOR.PATCH) para tomar decisiones informadas sobre actualizaciones.
Otros ejercicios de programación de Python
Evalúa tus conocimientos de esta lección Gestión de dependencias (pip, requirements.txt) con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Módulo math
Reto herencia
Excepciones
Introducción a Python
Reto variables
Funciones Python
Reto funciones
Módulo datetime
Reto acumulación
Reto estructuras condicionales
Polimorfismo
Módulo os
Reto métodos dunder
Diccionarios
Reto clases y objetos
Reto operadores
Operadores
Estructuras de control
Funciones lambda
Reto diccionarios
Reto función lambda
Encapsulación
Reto coleciones
Reto funciones auxiliares
Crear módulos y paquetes
Módulo datetime
Excepciones
Operadores
Diccionarios
Reto map, filter
Reto tuplas
Proyecto gestor de tareas CRUD
Tuplas
Variables
Tipos de datos
Conjuntos
Reto mixins
Módulo csv
Módulo json
Herencia
Análisis de datos de ventas con Pandas
Reto fechas y tiempo
Reto estructuras de iteración
Funciones
Reto comprehensions
Variables
Reto serialización
Módulo csv
Reto polimorfismo
Polimorfismo
Clases y objetos
Reto encapsulación
Estructuras de control
Importar módulos y paquetes
Módulo math
Funciones lambda
Reto excepciones
Listas
Reto archivos
Encapsulación
Reto conjuntos
Clases y objetos
Instalación de Python y creación de proyecto
Reto listas
Tipos de datos
Crear módulos y paquetes
Tuplas
Herencia
Reto acceso a sistema
Proyecto sintaxis calculadora
Importar módulos y paquetes
Clases y objetos
Módulo os
Listas
Conjuntos
Reto tipos de datos
Reto matemáticas
Módulo json
Todas las lecciones de Python
Accede a todas las lecciones de Python y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Python
Introducción
Instalación Y Creación De Proyecto
Introducción
Tema 2: Tipos De Datos, Variables Y Operadores
Introducción
Instalación De Python
Introducción
Tipos De Datos
Sintaxis
Variables
Sintaxis
Operadores
Sintaxis
Estructuras De Control
Sintaxis
Funciones
Sintaxis
Estructuras Control Iterativo
Sintaxis
Estructuras Control Condicional
Sintaxis
Testing Con Pytest
Sintaxis
Listas
Estructuras De Datos
Tuplas
Estructuras De Datos
Diccionarios
Estructuras De Datos
Conjuntos
Estructuras De Datos
Comprehensions
Estructuras De Datos
Clases Y Objetos
Programación Orientada A Objetos
Excepciones
Programación Orientada A Objetos
Encapsulación
Programación Orientada A Objetos
Herencia
Programación Orientada A Objetos
Polimorfismo
Programación Orientada A Objetos
Mixins Y Herencia Múltiple
Programación Orientada A Objetos
Métodos Especiales (Dunder Methods)
Programación Orientada A Objetos
Composición De Clases
Programación Orientada A Objetos
Funciones Lambda
Programación Funcional
Aplicación Parcial
Programación Funcional
Entrada Y Salida, Manejo De Archivos
Programación Funcional
Decoradores
Programación Funcional
Generadores
Programación Funcional
Paradigma Funcional
Programación Funcional
Composición De Funciones
Programación Funcional
Funciones Orden Superior Map Y Filter
Programación Funcional
Funciones Auxiliares
Programación Funcional
Reducción Y Acumulación
Programación Funcional
Archivos Comprimidos
Entrada Y Salida Io
Entrada Y Salida Avanzada
Entrada Y Salida Io
Archivos Temporales
Entrada Y Salida Io
Contexto With
Entrada Y Salida Io
Módulo Csv
Biblioteca Estándar
Módulo Json
Biblioteca Estándar
Módulo Datetime
Biblioteca Estándar
Módulo Math
Biblioteca Estándar
Módulo Os
Biblioteca Estándar
Módulo Re
Biblioteca Estándar
Módulo Random
Biblioteca Estándar
Módulo Time
Biblioteca Estándar
Módulo Collections
Biblioteca Estándar
Módulo Sys
Biblioteca Estándar
Módulo Statistics
Biblioteca Estándar
Módulo Pickle
Biblioteca Estándar
Módulo Pathlib
Biblioteca Estándar
Importar Módulos Y Paquetes
Paquetes Y Módulos
Crear Módulos Y Paquetes
Paquetes Y Módulos
Entornos Virtuales (Virtualenv, Venv)
Entorno Y Dependencias
Gestión De Dependencias (Pip, Requirements.txt)
Entorno Y Dependencias
Python-dotenv Y Variables De Entorno
Entorno Y Dependencias
Acceso A Datos Con Mysql, Pymongo Y Pandas
Acceso A Bases De Datos
Acceso A Mongodb Con Pymongo
Acceso A Bases De Datos
Acceso A Mysql Con Mysql Connector
Acceso A Bases De Datos
Novedades Python 3.13
Características Modernas
Operador Walrus
Características Modernas
Pattern Matching
Características Modernas
Instalación Beautiful Soup
Web Scraping
Sintaxis General De Beautiful Soup
Web Scraping
Tipos De Selectores
Web Scraping
Web Scraping De Html
Web Scraping
Web Scraping Para Ciencia De Datos
Web Scraping
Autenticación Y Acceso A Recursos Protegidos
Web Scraping
Combinación De Selenium Con Beautiful Soup
Web Scraping
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender qué es pip y cómo instalar, actualizar y gestionar paquetes en Python.
- Aprender a crear y utilizar el archivo requirements.txt para gestionar dependencias de proyectos.
- Saber instalar paquetes desde diferentes fuentes y con diversas opciones avanzadas.
- Conocer las mejores prácticas para el uso de entornos virtuales y la gestión de dependencias en proyectos.
- Aprender a actualizar y desinstalar paquetes, así como a resolver conflictos y mantener la seguridad de las dependencias.