01 Home

zhangly 2021-03-15 14:07:01
Categories: > Tags:

什么是Rez

Rez是一个跨平台程序包管理器,它可以给程序配置独立的环境。
与其它程序包环境管理不同的是,所有的程序包的安装都在一个中央统一的位置,
每个独立环境只是引用了这些包。所以它的环境配置是轻量级的,
尽管有几百个包,通常也只需要几秒就可以进行配置。

rez-home-p1.png
rez-home-p2.png

基本原理

Rez获取一个包的请求列表,然后构建目标环境,并解决所有包的依赖问题。
支持任何软件包。(包括Python)
每个软件包都有一个简洁的定义文件(package.py),
这个文件用于定义其依赖项,命令,以及其它meatadata信息。

一个python的软件包定义文件:

name = "requests"

version = "2.8.1"

authors = ["Kenneth Reitz"]

requires = [
    "python-2.7+"
]

def commands():
    env.PYTHONPATH.append("{root}/python")

上述文件所表达的含义是,此软件包需要python2.7或更高版本。
使用的时候,python的子目录会添加到 PYTHONPATH 环境变量中。

使用rez API或rez-env创建环境时,算法会解析并跟踪一个包所需依赖包的列表。
从而让Rez能够在几秒钟配置包含数百个软件包的环境。
这个依赖包的列表也可以保存在一个文件中,用于以后构建相同的环境。

例子

使用rez-env工具创建一个简单的环境(要求requests2.2+, python2.6,pymongo小于2.7)。

]$ rez-env requests-2.2+ python-2.6 'pymongo-0+<2.7'

You are now in a rez-configured environment.

resolved by ajohns@nn188.somewhere.com, 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'