Skip to content
Allan Johns edited this page May 23, 2016 · 34 revisions

media/rez_banner_128.png

What Is Rez?

Rez is a cross-platform software package management API and set of tools. Rez can build and install packages, and resolve environments at runtime using use a dependency resolution algorithm to avoid version conflicts. Both third party and internally developed packages can be made into Rez packages, and any kind of package (python, compiled, etc) is supported.

In its simplest use case, rez takes a request - a list of required packages - and produces a resolve - a list of packages that satisfy the requirements. The resolve will include packages that the requested packages depend on. This resolve can then be used to create a configured environment that the user can run a command in, or open an interative shell in.

The main tools are:

  • rez-env: Creates a configured shell containing a set of requested packages. Supports bash, tcsh and cmd (Windows), and can be extended to other shells.

  • rez-build: Builds a package of any type (python, C++ etc), and installs it locally for testing. Supports cmake, and can be extended to other build systems.

  • rez-release: Builds and centrally deploys a package, and updates the associated source control repository (creating tags etc). Supports git, mercurial and svn, and can be extended to other repository types.

  • rez-gui: A fully fledged graphical interface for creating resolved environments, launching tools and comparing different environments.

To see a listing of all the command line tools that rez provides, see here.

What Is Rez For?

Rez was primarily designed to quickly construct configured environments from a large number of package versions. For example, a user might need an environment containing Python 2.6, while at the same time, another user may need an environment containing Python 2.7, and the latest version of the 'requests' python module. Rez does not download and install these packages on request; rather, the packages are already available in one or more repositories on disk (typically on an NFS and available to all users), and rez focuses on using these packages to resolve dependencies and configure new environments as quickly as possible. Over time build and release functionality was added to rez, so that new packages can be created and deployed to these disk repositories in a standard way, so that all users can consume them.

Rez is aimed at companies or individuals who create and manage package versions, and need a way to switch between environments that use different versions of these packages.

What Problem Does Rez Solve?

Rez was written primarily to service the visual effects (VFX) industry, but in theory could be used in any software industry. In VFX, it is typical that developers produce many updates of different code bases (packages). A studio is almost always working on multiple productions (movies, commercials) at once, and these productions very often have different needs, and will need to use different versions of packages at any given time.

For example, one show might be early in production and will want to use the latest version of an internally developed animation plugin; at the same time, another production is nearing completion, and uses the same plugin, however they do not want to use the latest version in case it introduces bugs and interferes with their ability to deliver finalized shots on time. Rez provides the means for these different shows to define their own package requirements.

It is important to note that rez is not a production management system, it is a package configuration system. To illustrate the difference, consider:

Package configuration answers the question, “if I want this set of packages to function within a single environment, what set of packages, environment variables etc do I actually need?”

Whereas production management answers the question, “What set of packages do I need in this area of production, and how do I manage adding new packages, and updating versions?”

Clone this wiki locally