Rez — необычный кроссплатформенный менеджер пакетов. Используя Rez, вы можете создавать автономные среды, настроенные для заданного набора пакетов. Однако, в отличие от многих других менеджеров пакетов, пакеты не устанавливаются в эти автономные среды. Вместо этого все версии пакетов устанавливаются в центральный репозиторий, а автономные среды ссылаются на эти существующие пакеты. Это означает, что настроенные среды являются легкими и создаются очень быстро: настройка часто занимает всего несколько секунд, несмотря на то, что они содержат сотни пакетов.
Полную документацию смотрите в вики.
Типичные менеджеры пакетов устанавливают пакеты в среду.
Rez устанавливает пакеты один раз и динамически настраивает среды.
Rez берет список запросов пакетов и создает целевую среду, разрешая все необходимые зависимости пакетов. Поддерживается любой тип программного пакета — скомпилированный, Python, приложения и библиотеки.
Пакеты хранятся в репозиториях на диске. Каждый пакет имеет один краткий файл определения ( package.py ), который определяет его зависимости, его команды (как он настраивает содержащую его среду) и другие метаданные. Например, ниже приведен файл определения пакета для модуля Python популярных запросов :
name = "requests" version = "2.8.1" authors = ["Kenneth Reitz"] requires = [ "python-2.7+" ] def commands(): env.PYTHONPATH.append("{root}/python")
Для этого пакета требуется Python-2.7 или более поздняя версия. При использовании подкаталог «python» в месте установки добавляется к переменной среды PYTHONPATH.
Когда среда создается с помощью rez API или инструмента rez-env , алгоритм разрешения зависимостей отслеживает требования к пакету и преобразует их в список необходимых пакетов. Команды из этих пакетов объединяются и оцениваются, в результате чего создается настроенная среда. Rez может настраивать среды, содержащие сотни пакетов, часто за несколько секунд. Решения также можно сохранить в файл, и при последующей повторной оценке они снова реконструируют ту же среду.
В этом примере пользователь помещается в разрешенную оболочку, содержащую запрошенные пакеты, с помощью инструмента 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 > ]$ _
В этом примере создается среда, содержащая пакет «houdini» версии 12.5 или выше, и выполняется команда «hescape -h» внутри этой среды:
]$ 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
Разрешенные среды также можно создавать через 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'
Сначала установите Rez, используя Python 3.7+. Загрузите исходный код и из исходного каталога запустите (с заменой DEST_DIR на место установки):
]$ python3 ./install.py -v DEST_DIR
При этом будут установлены инструменты командной строки Rez. После завершения установки в конце будет напечатано сообщение о том, как использовать Rez. Rez не является обычным пакетом Python, поэтому его обычно не устанавливают с помощью pip или setup.py. Не перемещайте установку — переустановите ее в новое место, если хотите изменить путь установки. Если вы хотите установить rez для нескольких операционных систем, выполните отдельные установки для каждой из этих систем.
Далее вам нужно создать несколько необходимых пакетов Rez. Инструмент rez-bind создает пакеты Rez на основе программного обеспечения, уже установленного в вашей системе. Попробуйте связать следующий список пакетов (обратите внимание, что для Python вам могут потребоваться права администратора):
]$ rez-bind platform ]$ rez-bind arch ]$ rez-bind os ]$ rez-bind python
Теперь вы сможете создать среду, содержащую Python. Попробуйте это:
]$ rez-env python -- which python /home/ajohns/packages/python-2.7.8/platform-linux/arch-x86_64/os-Ubuntu-12.04/bin/python
Инструмент rez-build используется для сборки пакетов и их локальной установки (обычно в $HOME/packages ). Как только вы это сделаете, вы сможете использовать их через rez-env , как и любой другой пакет:
]$ cd example_packages/hello_world ]$ rez-build --install ... ]$ rez-env hello_world -- hello Hello world!
Поддерживает Linux, OSX и Windows;
Обеспечивает быстрый и эффективный цикл сборки-установки-тестирования;
Создает оболочки типа: bash, tcsh, другие (оболочки можно добавлять как плагины);
Содержит систему развертывания, поддерживающую git, mercurial и svn (в виде плагинов);
Решения среды можно сохранить на диск и повторно использовать позже (немного похоже на VirtualEnv);
Широкие возможности подключаемости, поддерживает пять различных типов плагинов, от добавления новых типов оболочки до добавления новых систем сборки;
Содержит алгоритм разрешения версий, позволяющий избежать конфликтов версий;
Визуализирует разрешенные среды в виде точечного графика;
Пакеты находятся в пути поиска, поэтому разные пакеты можно развертывать в разных местах;
Поддерживает буквенно-цифровые номера версий;
Имеет мощный синтаксис требований к версии, способный описывать любой диапазон версий, и оператор конфликта для отклонения диапазонов версий;
«Варианты» пакета — способ определить разные варианты одной и той же версии пакета, например плагин, созданный для нескольких версий главного приложения;
Пользовательские привязки выпуска (например, операции после выпуска) можно добавлять в виде плагинов;
Имеет функцию блокировки по времени, которая позволяет воссоздавать старые решения (более новые пакеты игнорируются);
Определения пакетов представляют собой один краткий файл;
Пакеты определяют свое влияние на среду (добавление в PATH и т. д.) независимо от платформы и оболочки, используя специальный API Python;
Имеет систему кэширования на основе memcached, позволяющую разрешить среду кэширования;
Имеет функцию фильтрации пакетов, позволяющую создавать поэтапные выпуски пакетов, такие как альфа- и бета-пакеты.
Если вы обнаружили ошибку, вам нужна помощь или вы хотите поговорить с разработчиками, вот список различных способов связаться с нами:
Сообщить о проблеме
Чат: присоединяйтесь к каналу #rez
Начать обсуждение
Список рассылки: обратите внимание, что в списке рассылки они гораздо менее активны, чем в любом другом канале связи.
В настоящее время сборки CMake не работают в Windows с Rez, а соответствующие тесты пропускаются. Исправление требует внесения нескольких изменений в дорожную карту. Пользователи успешно реализовали обходные пути для использования CMake с Rez под Windows, но цель состоит в том, чтобы обеспечить бесперебойную работу на любой платформе в будущем. Подробности смотрите в этом выпуске