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 [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'
首先,使用 Python 3.7+ 安装 Rez。下载源代码,然后从源目录运行(将 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;
允许快速高效的构建-安装-测试周期;
创建类型的 shell:bash、tcsh、其他(shell 可以作为插件添加);
包含支持 git、mercurial 和 svn 的部署系统(作为插件);
环境解析可以保存到磁盘并在以后重复使用(有点像 VirtualEnv);
高度可插拔,支持五种不同的插件类型来执行从添加新的 shell 类型到添加新的构建系统的操作;
包含版本解析算法,避免版本冲突;
在渲染的点图中可视化已解析的环境;
包是在搜索路径中找到的,因此不同的包可以部署到不同的位置;
支持字母数字版本号;
具有强大的版本要求语法,能够描述任何版本范围,以及用于拒绝版本范围的冲突运算符;
包“变体” - 一种定义同一包版本的不同风格的方法,例如为主机应用程序的多个版本构建的插件;
自定义发布钩子(例如发布后操作)可以作为插件添加;
具有时间锁定功能,允许重新创建旧的解析(新的包将被忽略);
包定义是一个单一的、简洁的文件;
包使用专用的 python API,以与平台和 shell 无关的方式定义它们对环境的影响(添加到 PATH 等);
拥有基于memcached的缓存系统,用于缓存环境解析;
具有包过滤功能,允许分阶段发布包,例如 alpha 和 beta 包。
如果您发现错误、需要帮助或想与开发人员交谈,请通过以下不同方式与我们联系:
报告问题
聊天室:加入#rez
频道
开始讨论
邮件列表:请注意,与任何其他通信渠道相比,邮件列表上的活跃程度要低得多。
目前,CMake 构建无法在 Windows 上使用 Rez 运行,并且会跳过相关测试。修复需要路线图上的多项更改。用户已经成功实现了在 Windows 下利用 CMake 和 Rez 的解决方法,但目标是将来在任何平台上提供无缝体验。详情请看这个问题