Rez中文文档12 Suites

概述

假设你希望为你的用户提供一些不同的工具,尽管这些工具需要在不同的环境中运行。

例如你希望工作室的艺术家能够从命令行运行maya和nuke,而不需要考虑它们的环境。

为了达到这样的需求,你会创建两个context:maya.rxt和nuke.rxt。

首先运行maya:

1
]$ rez-env --input maya.rxt -- maya

然后你可以将这个命令包装在一个脚本中,而这个脚本被称为maya:

1
2
#!/bin/bash
rez-env --input maya.rxt -- maya $*

现在,你把它放在$PATH里,并对nuke也是同样的做法。

那么这个是你的用户就可以从输入maya这个命令来运行这些应用程序,而不需要直到这背后发生来什么。
简而言之,这就是suites的意义,可以理解为包装,包含一组context以及运行工具的脚本。

rez-suite命令

同样还是上述的例子,这里使用rez-suite工具来完成。

首先我们创建一个suite,命令将在当前工作目录下创建一个名为mysuite的文件夹。

1
]$ rez-suite --create mysuite

现在我们需要向我们的suite添加context,首先创建context:

1
2
]$ rez-env maya-2016.2 --output maya.rxt
]$ rez-env nuke --output nuke.rxt

然后将这些context添加到suite里:(注意 —context 的参数只需要给予其名称)

1
2
]$ rez-suite --add maya.rxt --context maya mysuite
]$ rez-suite --add nuke.rxt --context nuke mysuite

现在suite已经创建完成,下面将它添加到$PATH中:

1
]$ export PATH=$(pwd)/mysuite/bin:$PATH

现在你可以看到它了:

1
2
3
4
5
6
]$ which maya
./mysuite/bin/maya

]$ ls ./mysuite/bin
maya
nuke

Suite工具

Suite中context的工具由包的tools属性决定:

1
2
3
4
5
6
# in maya package.py
tools = [
"maya",
"mayapy",
"fcheck"
]

所有这些工具都在suite中使用(你可以使用 rez-suite —hide来隐藏某个项)。
只有在context请求中列出的包,且不是弱请求或有冲突的请求,工具才会暴露有效。

而作为依赖关系拉进来的包则不会暴露。如果你需要控制一个不在请求中的软件包版本,
不用添加它的命令行工具,只需要将其添加到请求列表的弱引用。

工具别名

工具可以使用别名,比如这里将一个新版本的maya添加到suite中。

1
2
3
]$ rez-env maya-2017 --output maya2017.rxt
]$ rez-suite --add maya2017.rxt --context maya2017 mysuite
]$ rez-suite --suffix _beta --context maya2017 mysuite

控制参数

当使用suite里的工具时,所有参数都会按预期传递给底层工具。不过例外是,rez提供了一组控制参数,这些参数以+/++为前缀。这些是可感知套件参数。你可以使用+h/++help来获取它们:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
]$ maya ++help
usage: maya [+h] [+a] [+i] [+p [PKG [PKG ...]]] [++versions]
[++command COMMAND [ARG ...]] [++stdin] [++strict] [++nl]
[++peek] [++verbose] [++quiet] [++no-rez-args]

optional arguments:
+h, ++help show this help message and exit
+a, ++about print information about the tool
+i, ++interactive launch an interactive shell within the tool's
configured environment
+p [PKG [PKG ...]], ++patch [PKG [PKG ...]]
run the tool in a patched environment
++versions list versions of package providing this tool
++command COMMAND [ARG ...]
read commands from string, rather than executing the
tool
++stdin read commands from standard input, rather than
executing the tool
++strict strict patching. Ignored if ++patch is not present
++nl, ++no-local don't load local packages when patching
++peek diff against the tool's context and a re-resolved copy
- this shows how 'stale' the context is
++verbose verbose mode, repeat for more verbosity
++quiet hide welcome message when entering interactive mode
++no-rez-args pass all args to the tool, even if they start with '+'

例如,查看suite中maya工具的相关信息:

1
2
3
4
5
]$ maya ++about
Tool: maya
Path: ./mysuite/bin/maya
Suite: ./mysuite
Context: ./mysuite/contexts/maya2016.rxt ('maya2016')

提示:如果目标工具也使用+作为自己的参数,那么可以使用rez对其前缀字符修改。

参考 rez-suite —prefix-char选项。