什么是雷兹?
基础知识
例子
快速开始
构建你的第一个包
特征
什么是雷兹?
Rez 是一个与众不同的跨平台包管理器。使用 Rez,您可以创建为一组给定包配置的独立环境。但是,与许多其他包管理器不同,包不会安装到这些独立环境中。相反,所有包版本都安装到中央存储库中,并且独立环境引用这些现有包。这意味着配置的环境是轻量级的,并且创建速度非常快,尽管包含数百个包,但通常只需几秒钟即可完成配置。
有关完整文档,请参阅wiki。
典型的包管理器将包安装到环境中
Rez 安装一次软件包,并动态配置环境
Rez 获取包请求列表,并构建目标环境,解决所有必要的包依赖关系。支持任何类型的软件包 - 已编译、python、应用程序和库。
基础知识
包存储在磁盘上的存储库中。每个包都有一个简洁的定义文件(package.py),它定义了它的依赖关系、它的命令(它如何配置包含它的环境)和其他元数据。例如,下面是流行的requests 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工具将用户放入包含请求包的已解析 shell :
]$ 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
> ]$ _
此示例创建一个包含 12.5 或更高版本的包“houdini”的环境,并在该环境中运行命令“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。下载源代码,然后从源目录运行(将 DEST_DIR 替换为您的安装位置):
]$ python ./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);
高度可插拔,支持五种不同的插件类型,从添加新的 shell 类型到添加新的构建系统;
包含版本解析算法,用于避免版本冲突;
在渲染的点图中可视化已解决的环境;
在搜索路径中找到包,因此可以将不同的包部署到不同的位置;
支持字母数字版本号;
具有强大的版本需求语法,能够描述任何版本范围,以及拒绝版本范围的冲突算子;
包“变体”——一种定义同一包版本的不同风格的方法,例如为宿主应用程序的多个版本构建的插件;
可以将自定义发布挂钩(例如发布后操作)添加为插件;
具有时间锁定功能,允许重新创建旧的解析(忽略较新的包);
包定义是一个单一的、简洁的文件;
包使用专用的 Python API 以与平台和外壳无关的方式定义它们对环境的影响(添加到 PATH 等);
拥有基于memcached的缓存系统,用于缓存环境解析;
具有包过滤功能,允许分阶段发布包,例如 alpha 和 beta 包。
已知问题和限制
目前 CMake 构建在带有 Rez 的 Windows 上无法运行,并且相关测试被跳过。修复需要路线图上的多项更改。用户已经成功实现了在 Windows 下通过 Rez 使用 CMake 的变通方法,但目标是在未来在任何平台上提供无缝体验。有关详细信息,请参阅此问题