Rez介绍与使用指南
Rez介绍与使用指南
lingyun重新整理写了下
rez是什么
Rez是一个跨平台程序包管理器,它可以给程序配置独立的环境。
与其它程序包环境管理不同的是,所有的程序包的安装都在一个中央统一的位置,
每个独立环境只是引用了这些包。所以它的环境配置是轻量级的,
项目地址: https://github.com/AcademySoftwareFoundation/rez
官方帮助文档: https://rez.readthedocs.io/en/stable/
翻译后的中文文档: https://lingyunfx.com/00%20rez-wiki-cn/
rez最开始是Dr.D Studio于2011年用python写的依赖解算器,于2012年开源。
之后的V2版本几乎重写,变成一个完整的API。
具有跨平台,支持多种shell环境,基于python的包格式定义等特性。
它是针对视效工作室流程开发的工具:
- 在项目中,配置不同版本的dcc软件,插件以及环境(并且可以灵活动态的进行增减)
- 快速适应不同类型的部署工作(比如不同方案需要不同的渲染流程)
- 在出现问题的时候,可以快速回溯到上一个流程环境
- 能快速测试尚未投入生产的产品
- Pipeline不受到迁移操作系统等事件的影响
- 尽量减少开发人员对制作的时间占用
为什么要使用rez
作为TD需要对公司的生产环境进行统一配置和管理,以此确保所有制作人员都能在相同的条件下工作,从而减少因环境差异导致的问题和错误。
通过环境变量来对dcc软件设置是常用手段,比如:
- 修改maya界面的语言,设置
MAYA_UI_LANGUAGE变量 - 让maya使用render setup,设置
MAYA_ENABLE_LEGACY_RENDER_LAYERS变量 - 让“Paint Effects”使用计算机上的多个处理器,设置
MAYA_PAINT_EFFECTS_THREADS变量 - 指定maya插件位置,设置
MAYA_PLUG_IN_PATH变量 - 等等..
设置好环境变量,这个时候启动maya就成了个“私人定制版”。
如何在启动maya前设置环境变量?
最简单的方式,是使用cmd命令行设置临时变量。
比如要设置maya界面为中文,输入
1 | set MAYA_UI_LANGUAGE='zh_CN' |
再启动maya
1 | "C:\Program Files\Autodesk\Maya2018\bin\maya.exe" |
而公司TD为方便制作人员使用,通常会写一个bat脚本,或是python程序来做这件事。
在没有rez之前,一个通用的方法是:
将需要设置的变量写到一个ymal文件中,然后使用python转换数据,最后使用subprocess加载环境。
yaml文件示例:
1 | Software: Maya |
如果公司的项目配置较为复杂,不同的项目使用不同的渲染器,不同的maya版本对应不同的插件版本,又或是想要同时兼容windows和linux两个系统,那么使用rez可以灵活处理环境的管理问题。
安装rez
在这里下载源码
https://github.com/AcademySoftwareFoundation/rez/releases
下载后解压,进入文件夹进行安装
(安装前需在本地安装python解释器)
1 | 切换到rez源码目录 |
看到SUCCESS就代表安装成功了,安装位置默认在当前盘符的opt/rez路径下。
也可指定目录安装:
1 | python ./install.py -v {目录路径} |
根据提示把执行文件路径加入PATH环境变量中。
接下来,可以根据当前系统环境创建一些基础包,使用rez-bind命令。
注意,如果找不到rez-bind命令,查看是否已经将rez加入到PATH变量中,并重开cmd命令行。
安装最后一个python包时,需要使用管理员权限打开cmd命令行。
1 | 创建一个描述当前平台的包 |
这里创建了4个package,默认放在C:\Users\{用户名}\packages下。
在使用
rez-bind python前,我的系统默认为python3.10,所以创建的python包版本也是3.10。
使用rez-env可以根据定义的包,创建一个环境。
1 | 创建一个python环境 |
rez包是使用rez的核心,
package.py是这个包的定义文件,它描述了这个包所需要的依赖,以及环境设置。每一个包可以当作一块积木,它们可以任意组合,以达到所需的环境配置。
每个包的目录结构大概是:
1 | python (包名称) |
一个最简单的package.py内容如下:
1 | name = 'python' # 软件包名称 |
配置
这里主要是配置一个rez package包存储路径,让rez-env解析时,能找到我们的包位置。
关于配置更多了解查看Rez中文文档05 Configuring Rez
方式一 - 修改rezconfig
默认配置文件是rez安装目录下rezconfig.py文件。
为了能统一设置,可以新建一个rezconfig.py文件放在服务器上,然后使用环境变量REZ_CONFIG_FILE更改rez配置文件路径。
比如我们要统一设置rez包的存放位置,可以这样写:
1 | packages_path = [ |
设置完成后执行rez-config packages_path查看是否配置已经更新。
方式二 - 指定环境变量
简单一些,只设置REZ_PACKAGES_PATH来指定rez包的存放位置。
比如
1 | REZ_PACKAGES_PATH=Z:/packages/plug-ins;Z:/packages/third-lib;Z:/packages/tools |
定义包
package包是rez的核心和基础,在包中定义好所需的环境变量,rez才能通过包解析来设置正确的软件环境。
新建一个简单的maya包。
在本地的C:\Users\{用户名}\packages这个目录结构,新建一个名为maya的rez包。
层级结构如下
packages目录
- maya
- 2018
package.py
- 2018
文件内容
1 | name = 'maya' |
打开cmd终端,输入
1 | 解析并创建maya环境 |
打开maya后可以检查刚刚在package.py里设置的环境变量,是否设置成功。
然后我们可以再创建一个mtoa的包,package文件就是:
1 | name = 'mtoa' |
如果要在maya启动时,加载这个包,命令行运行
1 | rez-env maya mtoa |
一个项目可能会用到非常多的插件,和一些代码工具。
为它们创建package后,使用命令行调用可能会变得很长,就像:
1 | rez-env maya-2023 mtoa shotgun_api ocio maya_umbrella |
遇到这种情况,也可以将它们封装成一个项目包,比如
packages目录
- TST
package.py
文件内容
1 | name='TST' |
在命令行中只需要rez-env TST
rez包就像积木一样,定义好每一块积木后,想怎么搭建就怎么搭建。
关于包的定义还有非常的多特性,参考07 Package Definition Guide
一些扩展
context
rez支持将目标环境写入一个文件中,比如:rez-env maya xgen --output test.rxt
然后通过读取文件的方式,构建环境:rez-env --input test.rxt
bundle
也可以将rxt文件和它所需要的软件包进行打包。rez-bundle test.rxt mybundle
打包后,软件包和rxt文件被放在了同一个目录:
(这使得bundle是可移动和独立的)
执行rez-env -i mybundle/context.rxt 进行构建环境。
variants
变体是一个非常有用的概念,这里用Arnold插件来举例。
Arnold插件支持Maya和Houdini,且跨平台,在Mac,Linux,Windows系统下都可以使用。
这样的话同一个版本的Arnold,会根据不同的系统平台和不同的软件产生多个分支,我们这样定义一个arnold包:
- arnold
- 1.0
- package.py
- platform-linux
- houdini
- maya
- platform-osx
- houdini
- maya
- platform-win
- houdini
- maya
- 1.0
package.py内容如下
1 | name = 'arnold' |
当我们执行命令rez-env maya arnold,rez就能根据当前系统,以及请求的包,解析出正确的路径,并添加到PATH变量中。
打开Maya检查一下:
上述只是一个示例,正常生产环境中,不建议这样管理arnold插件,最好还是分mtoa,htoa,ktoa三个包,然后分版本进行构建。
API
上述的所有操作都可以使用python api来实现。
1 | import subprocess |
可以用python写一个交互UI,让制作人员能更直观的进行操作。











