Un paquete es un conjunto organizado de archivos y directorios que agrupa código fuente, recursos y metadatos relacionados con una funcionalidad específica.
En términos más sencillos, podríamos considerarlos como cajas que contienen herramientas y utilidades que puedes añadir a tu proyecto, y que facilitan la construcción de programas y aplicaciones.
Dentro de un paquete, es común encontrar uno o más bibliotecas. La diferencia respecto a una librería es que vienen “paquetizados” (de ahí su nombre) para que sea más sencillo para ti incluirlos en tu trabajo.
Al igual que las librerías los paquetes pueden ser:
Internas
, creadas por tu o por un compañero del trabajoOpen Source
, de código abierto y mantenidas por la comunidadPrivativas o "de terceros"
, generalmente de pago
Además, la “gracia” principal de los paquetes es que incluyen información adicional en forma de metadatos.
Estos metadatos pueden incluir el título, el nombre del autor, y especialmente importante, información sobre la versión y sus dependencias (también con sus versiones). Esto facilita la gestión del versionado, que ya vimos que podría convertirse en un auténtico infierno.
Que es un gestor de paquetes
Los paquetes se añaden a tu proyecto a través de un gestor de paquetes. Esto es una gran diferencia respecto a una biblioteca (que simplemente descargas y enchufas a tu proyecto).
Los gestores de paquetes son herramientas fundamentales en el proceso de desarrollo de software, sobre todo para no volverte loco con las versiones y dependencias.
La función principal de un gestor de paquetes es facilitar la instalación, actualización, configuración y eliminación de paquetes y sus dependencias de manera automatizada.
Los gestores de paquetes también manejan la resolución de dependencias. Esto significa que, si un paquete depende de otros paquetes para funcionar correctamente, el gestor de paquetes se encargará de descargar e instalar automáticamente las versiones adecuadas de esas dependencias.
Además, es frecuente tener repositorios en línea públicos, donde se almacenan las versiones de los paquetes disponibles y sus dependencias de esta forma, añadir una biblioteca a tu programa es aún más sencillo).
Los paquetes y los gestores de paquetes van unidos. Cada gestor de paquetes, usa su propio tipo de paquetes. Además, son específicos para cada lenguaje de programación.
La mayoría de los lenguajes de programación, como C#, Python, Java o JavaScript o C++, por ejemplo, tienen uno o varios formatos de paquetes y gestores de paquetes. En muchos casos, vienen incluidos con el entorno de desarrollo o el lenguaje mismo.
Por último, los gestores de paquetes suelen tener uno o varios ficheros de configuración. Generalmente es un fichero de texto (en formato simple, toml, yaml, json…) que tiene un nombre específico.
Ejemplo de gestores de paquetes
Mejor lo vemos con algunos ejemplos.
Node.js emplea “NPM” (Node Package Manager) como su gestor de paquetes por defecto. Para agregar, actualizar o eliminar paquetes, los desarrolladores pueden utilizar comandos como:
npm install nombre_paquete
npm install nombre_paquete@versión
npm uninstall nombre_paquete
En este caso, el fichero de configuración en packaje.json
Python utiliza el gestor de paquetes “PIP” (pip installs packages). Con una simple línea de comandos, los desarrolladores pueden instalar, actualizar o eliminar paquetes. Por ejemplo:
pip install nombre_paquete
pip install nombre_paquete==versión
pip uninstall nombre_paquete
El fichero de configuración suele llamarse requirements.txt
C# utiliza “NuGet” como su gestor de paquetes estándar. NuGet es una herramienta de línea de comandos y una extensión para Visual Studio que permite a los desarrolladores agregar, quitar y actualizar paquetes fácilmente en proyectos de C# y .NET. Por ejemplo:
nuget install NombrePaquete
nuget install NombrePaquete -Version Version
nuget uninstall NombrePaquete
En el pasado, C# utilizaba un archivo “packages.config” para gestionar las dependencias en proyectos más antiguos, pero con la introducción del enfoque de PackageReference
, la gestión de dependencias se ha vuelto más sencilla y eficiente. En su lugar, ahora las dependencias se agregan directamente al archivo .csproj
.
En C++ “Conan” se ha convertido en una popular herramienta de gestión de paquetes. Conan permite a los desarrolladores gestionar fácilmente bibliotecas y sus dependencias, lo que facilita el proceso de compilación y enlazado de proyectos en C++ Ejemplos de uso:
conan install NombrePaquete/Version
conan install NombrePaquete/Version@user/channel
conan remove NombrePaquete/Version
El fichero de configuración suele llamarse conanfile.txt
o conanfile.py