12 Suites

zhangly 2021-03-15 19:01:19
Categories: > Tags:

概述

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

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

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

首先运行maya:

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

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

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

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

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

rez-suite命令

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

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

]$ rez-suite --create mysuite

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

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

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

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

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

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

现在你可以看到它了:

]$ which maya
./mysuite/bin/maya

]$ ls ./mysuite/bin
maya
nuke

Suite工具

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

# in maya package.py
tools = [
    "maya",
    "mayapy",
    "fcheck"
]

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

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

工具别名

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

]$ 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来获取它们:

]$ 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工具的相关信息:

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

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

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