Rez es un administrador de paquetes multiplataforma con una diferencia. Con Rez puede crear entornos independientes configurados para un conjunto determinado de paquetes. Sin embargo, a diferencia de muchos otros administradores de paquetes, los paquetes no se instalan en estos entornos independientes. En cambio, todas las versiones de los paquetes se instalan en un repositorio central y los entornos independientes hacen referencia a estos paquetes existentes. Esto significa que los entornos configurados son livianos y muy rápidos de crear, y a menudo tardan solo unos segundos en configurarse a pesar de contener cientos de paquetes.
Consulte la wiki para obtener la documentación completa.
Los administradores de paquetes típicos instalan paquetes en un entorno
Rez instala paquetes una vez y configura entornos dinámicamente
Rez toma una lista de solicitudes de paquetes y construye el entorno de destino, resolviendo todas las dependencias de paquetes necesarias. Se admite cualquier tipo de paquete de software: compilado, Python, aplicaciones y bibliotecas.
Los paquetes se almacenan en repositorios en el disco. Cada paquete tiene un único archivo de definición conciso ( paquete.py ) que define sus dependencias, sus comandos (cómo configura el entorno que los contiene) y otros metadatos. Por ejemplo, el siguiente es el archivo de definición de paquete para el módulo de Python de solicitudes populares:
name = "requests" version = "2.8.1" authors = ["Kenneth Reitz"] requires = [ "python-2.7+" ] def commands(): env.PYTHONPATH.append("{root}/python")
Este paquete requiere python-2.7 o superior. Cuando se utiliza, el subdirectorio 'python' dentro de su ubicación de instalación se agrega a la variable de entorno PYTHONPATH.
Cuando se crea un entorno con la API rez o la herramienta rez-env , un algoritmo de resolución de dependencias rastrea los requisitos del paquete y los resuelve en una lista de paquetes necesarios. Los comandos de estos paquetes se concatenan y evalúan, lo que da como resultado un entorno configurado. Rez puede configurar entornos que contienen cientos de paquetes, a menudo en unos pocos segundos. Las resoluciones también se pueden guardar en un archivo y, cuando se vuelvan a evaluar más tarde, reconstruirán el mismo entorno una vez más.
Este ejemplo coloca al usuario en un shell resuelto que contiene los paquetes solicitados, utilizando la herramienta rez-env:
]$ rez-env requests-2.2+ python-2.6 'pymongo-0+<2.7' You are now in a rez-configured environment. resolved by [email protected], on Wed Feb 26 15:56:20 2014, using Rez v2.0.0 requested packages: requests-2.2+ python-2.6 pymongo-0+<2.7 resolved packages: python-2.6.8 /software/ext/python/2.6.8 platform-linux /software/ext/platform/linux requests-2.2.1 /software/ext/requests/2.2.1/python-2.6 pymongo-2.6.3 /software/ext/pymongo/2.6.3 arch-x86_64 /software/ext/arch/x86_64 > ]$ _
Este ejemplo crea un entorno que contiene el paquete 'houdini' versión 12.5 o superior y ejecuta el comando 'hescape -h' dentro de ese entorno:
]$ rez-env houdini-12.5+ -- hescape -h Usage: hescape [-foreground] [-s editor] [filename ...] -h: output this usage message -s: specify starting desktop by name -foreground: starts process in foreground
Los entornos resueltos también se pueden crear a través de la API:
>>> import subprocess >>> from rez.resolved_context import ResolvedContext >>> >>> r = ResolvedContext(["houdini-12.5+", "houdini-0+<13", "java", "!java-1.8+"]) >>> p = r.execute_shell(command='which hescape', stdout=subprocess.PIPE) >>> out, err = p.communicate() >>> >>> print(out) '/software/ext/houdini/12.5.562/bin/hescape'
Primero, instale Rez usando Python 3.7+. Descargue el código fuente y, desde el directorio de origen, ejecute (con DEST_DIR reemplazado por su ubicación de instalación):
]$ python3 ./install.py -v DEST_DIR
Esto instala las herramientas de línea de comandos de Rez. Imprimirá un mensaje al final indicándole cómo usar Rez cuando se haya completado la instalación. Rez no es un paquete de Python normal, por lo que normalmente no lo instala con pip o setup.py. No mueva la instalación; vuelva a instalarla en una nueva ubicación si desea cambiar la ruta de instalación. Si desea instalar rez para varios sistemas operativos, realice instalaciones independientes para cada uno de esos sistemas.
A continuación, debe crear algunos paquetes Rez esenciales. La herramienta rez-bind crea paquetes Rez que se basan en el software ya instalado en su sistema. Intente vincular la siguiente lista de paquetes (tenga en cuenta que para Python, es posible que necesite privilegios administrativos):
]$ rez-bind platform ]$ rez-bind arch ]$ rez-bind os ]$ rez-bind python
Ahora debería poder crear un entorno que contenga Python. Prueba esto:
]$ rez-env python -- which python /home/ajohns/packages/python-2.7.8/platform-linux/arch-x86_64/os-Ubuntu-12.04/bin/python
La herramienta rez-build se utiliza para crear paquetes e instalarlos localmente (normalmente en $HOME/packages ). Una vez que hayas hecho eso, puedes usarlos a través de rez-env , como cualquier otro paquete:
]$ cd example_packages/hello_world ]$ rez-build --install ... ]$ rez-env hello_world -- hello Hello world!
Soporta Linux, OSX y Windows;
Permite un ciclo de compilación, instalación y prueba rápido y eficiente;
Crea shells de tipo: bash, tcsh, other (los shells se pueden agregar como complementos);
Contiene un sistema de implementación que admite git, mercurial y svn (como complementos);
Las resoluciones del entorno se pueden guardar en el disco y reutilizar en una fecha posterior (un poco como VirtualEnv);
Altamente conectable, admite cinco tipos de complementos diferentes para hacer cosas, desde agregar nuevos tipos de shell hasta agregar nuevos sistemas de compilación;
Contiene un algoritmo de resolución de versiones para evitar conflictos de versiones;
Visualiza entornos resueltos en un gráfico de puntos renderizado;
Los paquetes se encuentran en una ruta de búsqueda, por lo que se pueden implementar diferentes paquetes en diferentes ubicaciones;
Admite números de versión alfanuméricos;
Tiene una potente sintaxis de requisitos de versión, capaz de describir cualquier rango de versiones y un operador de conflicto para rechazar rangos de versiones;
'Variantes' de paquetes: una forma de definir diferentes versiones de la misma versión del paquete, por ejemplo, un complemento creado para múltiples versiones de la aplicación host;
Se pueden agregar ganchos de lanzamiento personalizados (como operaciones posteriores al lanzamiento) como complementos;
Tiene una función de bloqueo de tiempo, que permite recrear resoluciones antiguas (se ignoran los paquetes más nuevos);
Las definiciones de paquetes son un archivo único y conciso;
Los paquetes definen su efecto en el entorno (agregándolos a PATH, etc.) de manera independiente de la plataforma y del shell, utilizando una API de Python dedicada;
Tiene un sistema de almacenamiento en caché basado en Memcached, para resolver el entorno de almacenamiento en caché;
Tiene una función de filtrado de paquetes, que permite lanzamientos de paquetes por etapas, como paquetes alfa y beta.
Si encuentra un error, necesita ayuda o quiere hablar con los desarrolladores, aquí tiene una lista de las diferentes formas de ponerse en contacto con nosotros:
Informar un problema
Sala de chat: únete al canal #rez
Iniciar una discusión
Lista de correo: tenga en cuenta que son mucho menos activos en la lista de correo que en cualquier otro canal de comunicación.
Actualmente, las compilaciones de CMake no funcionan en Windows con Rez y se omiten las pruebas relacionadas. Una solución requiere múltiples cambios que están en la hoja de ruta. Los usuarios han implementado con éxito soluciones alternativas para utilizar CMake con Rez en Windows, pero el objetivo es brindar una experiencia perfecta en cualquier plataforma en el futuro. Para obtener más información, consulte este número.