Rez ist ein plattformübergreifender Paketmanager der besonderen Art. Mit Rez können Sie eigenständige Umgebungen erstellen, die für einen bestimmten Paketsatz konfiguriert sind. Im Gegensatz zu vielen anderen Paketmanagern werden Pakete jedoch nicht in diesen eigenständigen Umgebungen installiert. Stattdessen werden alle Paketversionen in einem zentralen Repository installiert und eigenständige Umgebungen verweisen auf diese vorhandenen Pakete. Dies bedeutet, dass konfigurierte Umgebungen leichtgewichtig sind und sehr schnell erstellt werden können. Die Konfiguration dauert oft nur wenige Sekunden, obwohl sie Hunderte von Paketen enthält.
Die vollständige Dokumentation finden Sie im Wiki.
Typische Paketmanager installieren Pakete in einer Umgebung
Rez installiert Pakete einmal und konfiguriert Umgebungen dynamisch
Rez nimmt eine Liste von Paketanforderungen, erstellt die Zielumgebung und löst alle erforderlichen Paketabhängigkeiten auf. Jede Art von Softwarepaket wird unterstützt – kompiliert, Python, Anwendungen und Bibliotheken.
Pakete werden in Repositorys auf der Festplatte gespeichert. Jedes Paket verfügt über eine einzige prägnante Definitionsdatei ( package.py ), die seine Abhängigkeiten, seine Befehle (wie es die Umgebung konfiguriert, die es enthält) und andere Metadaten definiert. Das Folgende ist beispielsweise die Paketdefinitionsdatei für das beliebte Python-Modul „ Requests “:
name = "requests" version = "2.8.1" authors = ["Kenneth Reitz"] requires = [ "python-2.7+" ] def commands(): env.PYTHONPATH.append("{root}/python")
Dieses Paket erfordert Python-2.7 oder höher. Bei Verwendung wird das Unterverzeichnis „python“ innerhalb seines Installationsorts an die Umgebungsvariable PYTHONPATH angehängt.
Wenn eine Umgebung mit der rez-API oder dem rez-env- Tool erstellt wird, verfolgt ein Algorithmus zur Abhängigkeitsauflösung die Paketanforderungen und löst sie in eine Liste der benötigten Pakete auf. Die Befehle aus diesen Paketen werden verkettet und ausgewertet, was zu einer konfigurierten Umgebung führt. Rez ist in der Lage, Umgebungen mit Hunderten von Paketen zu konfigurieren, oft innerhalb weniger Sekunden. Lösungen können auch in einer Datei gespeichert werden und bei einer späteren erneuten Auswertung wird dieselbe Umgebung erneut wiederhergestellt.
In diesem Beispiel wird der Benutzer mit dem rez-env-Tool in eine aufgelöste Shell platziert, die die angeforderten Pakete enthält:
]$ 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 > ]$ _
In diesem Beispiel wird eine Umgebung erstellt, die das Paket „houdini“ Version 12.5 oder höher enthält, und der Befehl „hescape -h“ wird in dieser Umgebung ausgeführt:
]$ 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
Über die API können auch aufgelöste Umgebungen erstellt werden:
>>> 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'
Installieren Sie zunächst Rez mit Python 3.7+. Laden Sie die Quelle herunter und führen Sie sie aus dem Quellverzeichnis aus (wobei DEST_DIR durch Ihren Installationsort ersetzt wird):
]$ python3 ./install.py -v DEST_DIR
Dadurch werden die Rez-Befehlszeilentools installiert. Am Ende wird eine Meldung gedruckt, die Ihnen erklärt, wie Sie Rez verwenden, wenn die Installation abgeschlossen ist. Rez ist kein normales Python-Paket und wird daher normalerweise nicht mit pip oder setup.py installiert. Verschieben Sie die Installation nicht – installieren Sie sie erneut an einem neuen Speicherort, wenn Sie den Installationspfad ändern möchten. Wenn Sie rez für mehrere Betriebssysteme installieren möchten, führen Sie für jedes dieser Systeme eine separate Installation durch.
Als Nächstes müssen Sie einige wichtige Rez-Pakete erstellen. Das rez-bind- Tool erstellt Rez-Pakete, die auf bereits auf Ihrem System installierter Software basieren. Versuchen Sie, die folgende Paketliste zu binden (beachten Sie, dass Sie für Python möglicherweise Administratorrechte benötigen):
]$ rez-bind platform ]$ rez-bind arch ]$ rez-bind os ]$ rez-bind python
Jetzt sollten Sie in der Lage sein, eine Umgebung mit Python zu erstellen. Versuchen Sie Folgendes:
]$ rez-env python -- which python /home/ajohns/packages/python-2.7.8/platform-linux/arch-x86_64/os-Ubuntu-12.04/bin/python
Das rez-build- Tool wird verwendet, um Pakete zu erstellen und lokal zu installieren (normalerweise in $HOME/packages ). Sobald Sie das getan haben, können Sie sie wie jedes andere Paket über rez-env verwenden:
]$ cd example_packages/hello_world ]$ rez-build --install ... ]$ rez-env hello_world -- hello Hello world!
Unterstützt Linux, OSX und Windows;
Ermöglicht einen schnellen und effizienten Build-Install-Test-Zyklus;
Erstellt Shells vom Typ: bash, tcsh, other (Shells können als Plugins hinzugefügt werden);
Enthält ein Bereitstellungssystem, das Git, Mercurial und SVN (als Plugins) unterstützt;
Umgebungsauflösungen können auf der Festplatte gespeichert und zu einem späteren Zeitpunkt wiederverwendet werden (ähnlich wie bei VirtualEnv).
Hochgradig steckbar, unterstützt fünf verschiedene Plugin-Typen, vom Hinzufügen neuer Shell-Typen bis hin zum Hinzufügen neuer Build-Systeme;
Enthält einen Versionsauflösungsalgorithmus zur Vermeidung von Versionskonflikten;
Visualisiert aufgelöste Umgebungen in einem gerenderten Punktdiagramm;
Pakete werden in einem Suchpfad gefunden, sodass unterschiedliche Pakete an unterschiedlichen Orten bereitgestellt werden können;
Unterstützt alphanumerische Versionsnummern;
Verfügt über eine leistungsstarke Syntax für Versionsanforderungen, die jeden Versionsbereich beschreiben kann, sowie über einen Konfliktoperator zum Zurückweisen von Versionsbereichen.
Paketvarianten – eine Möglichkeit, verschiedene Varianten derselben Paketversion zu definieren, beispielsweise ein Plugin, das für mehrere Versionen der Host-App erstellt wurde;
Benutzerdefinierte Release-Hooks (z. B. Post-Release-Vorgänge) können als Plugins hinzugefügt werden.
Verfügt über eine Zeitsperrfunktion, die es ermöglicht, alte Auflösungen neu zu erstellen (neuere Pakete werden ignoriert);
Paketdefinitionen sind eine einzelne, prägnante Datei;
Pakete definieren ihre Auswirkungen auf die Umgebung (Hinzufügen zu PATH usw.) auf plattform- und Shell-unabhängige Weise mithilfe einer dedizierten Python-API.
Verfügt über ein Memcached-basiertes Caching-System zum Caching von Umgebungsauflösungen;
Verfügt über eine Paketfilterfunktion, die gestaffelte Paketveröffentlichungen wie Alpha- und Betapakete ermöglicht.
Wenn Sie einen Fehler finden, Hilfe benötigen oder mit den Entwicklern sprechen möchten, finden Sie hier eine Liste der verschiedenen Möglichkeiten, mit uns in Kontakt zu treten:
Melden Sie ein Problem
Chatroom: Treten Sie dem #rez
-Kanal bei
Starten Sie eine Diskussion
Mailingliste: Beachten Sie, dass die Teilnehmer auf der Mailingliste deutlich weniger aktiv sind als auf jedem anderen Kommunikationskanal.
Derzeit funktionieren CMake-Builds unter Windows mit Rez nicht und die entsprechenden Tests werden übersprungen. Für einen Fix sind mehrere Änderungen erforderlich, die auf der Roadmap stehen. Benutzer haben erfolgreich Problemumgehungen implementiert, um CMake mit Rez unter Windows zu verwenden, aber das Ziel besteht darin, in Zukunft ein nahtloses Erlebnis auf jeder Plattform zu bieten. Einzelheiten finden Sie in dieser Ausgabe