Rez é um gerenciador de pacotes multiplataforma com uma diferença. Usando Rez você pode criar ambientes autônomos configurados para um determinado conjunto de pacotes. Entretanto, diferentemente de muitos outros gerenciadores de pacotes, os pacotes não são instalados nesses ambientes independentes. Em vez disso, todas as versões de pacotes são instaladas em um repositório central e ambientes independentes fazem referência a esses pacotes existentes. Isso significa que os ambientes configurados são leves e muito rápidos de criar, muitas vezes demorando apenas alguns segundos para configurar, apesar de conterem centenas de pacotes.
Veja o wiki para documentação completa.
Gerenciadores de pacotes típicos instalam pacotes em um ambiente
Rez instala pacotes uma vez e configura ambientes dinamicamente
Rez pega uma lista de solicitações de pacotes e constrói o ambiente de destino, resolvendo todas as dependências de pacotes necessárias. Qualquer tipo de pacote de software é suportado – compilado, python, aplicativos e bibliotecas.
Os pacotes são armazenados em repositórios no disco. Cada pacote possui um único arquivo de definição conciso ( package.py ) que define suas dependências, seus comandos (como ele configura o ambiente que o contém) e outros metadados. Por exemplo, a seguir está o arquivo de definição de pacote para o módulo python de solicitações populares:
name = "requests" version = "2.8.1" authors = ["Kenneth Reitz"] requires = [ "python-2.7+" ] def commands(): env.PYTHONPATH.append("{root}/python")
Este pacote requer python-2.7 ou superior. Quando usado, o subdiretório 'python' em seu local de instalação é anexado à variável de ambiente PYTHONPATH.
Quando um ambiente é criado com a API rez ou a ferramenta rez-env , um algoritmo de resolução de dependência rastreia os requisitos do pacote e resolve uma lista de pacotes necessários. Os comandos desses pacotes são concatenados e avaliados, resultando em um ambiente configurado. Rez é capaz de configurar ambientes contendo centenas de pacotes, geralmente em poucos segundos. As resoluções também podem ser salvas em arquivo e, quando reavaliadas posteriormente, reconstruirão o mesmo ambiente mais uma vez.
Este exemplo coloca o usuário em um shell resolvido contendo os pacotes solicitados, usando a ferramenta rez-env:
]$ 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 > ]$ _
Este exemplo cria um ambiente contendo o pacote 'houdini' versão 12.5 ou superior e executa o comando 'hescape -h' dentro desse ambiente:
]$ 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
Os ambientes resolvidos também podem ser criados através da 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'
Primeiro, instale o Rez usando Python 3.7+. Baixe a fonte e, a partir do diretório de origem, execute (com DEST_DIR substituído pelo local de instalação):
]$ python3 ./install.py -v DEST_DIR
Isso instala as ferramentas de linha de comando Rez. Ele imprimirá uma mensagem no final informando como usar o Rez quando a instalação for concluída. Rez não é um pacote Python normal e, portanto, normalmente você não o instala com pip ou setup.py. Não mova a instalação - reinstale em um novo local se desejar alterar o caminho de instalação. Se você deseja instalar o rez para vários sistemas operacionais, execute instalações separadas para cada um desses sistemas.
Em seguida, você precisa criar alguns pacotes Rez essenciais. A ferramenta rez-bind cria pacotes Rez baseados em software já instalado em seu sistema. Tente vincular a seguinte lista de pacotes (observe que para Python, você pode precisar de privilégios administrativos):
]$ rez-bind platform ]$ rez-bind arch ]$ rez-bind os ]$ rez-bind python
Agora você deve ser capaz de criar um ambiente contendo Python. Experimente isto:
]$ rez-env python -- which python /home/ajohns/packages/python-2.7.8/platform-linux/arch-x86_64/os-Ubuntu-12.04/bin/python
A ferramenta rez-build é usada para construir pacotes e instalá-los localmente (normalmente em $HOME/packages ). Depois de fazer isso, você poderá usá-los via rez-env , como qualquer outro pacote:
]$ cd example_packages/hello_world ]$ rez-build --install ... ]$ rez-env hello_world -- hello Hello world!
Suporta Linux, OSX e Windows;
Permite um ciclo rápido e eficiente de construção, instalação e teste;
Cria shells do tipo: bash, tcsh, other (shells podem ser adicionados como plugins);
Contém um sistema de implantação que suporta git, mercurial e svn (como plugins);
As resoluções do ambiente podem ser salvas em disco e reutilizadas posteriormente (um pouco como o VirtualEnv);
Altamente conectável, suporta cinco tipos diferentes de plug-ins para fazer coisas, desde adicionar novos tipos de shell até adicionar novos sistemas de construção;
Contém um algoritmo de resolução de versão, para evitar conflitos de versão;
Visualiza ambientes resolvidos em um gráfico de pontos renderizado;
Os pacotes são encontrados em um caminho de pesquisa, portanto, pacotes diferentes podem ser implantados em locais diferentes;
Suporta números de versão alfanuméricos;
Possui uma poderosa sintaxe de requisitos de versão, capaz de descrever qualquer intervalo de versões e um operador de conflito para rejeitar intervalos de versões;
'Variantes' de pacote - uma forma de definir diferentes sabores da mesma versão do pacote, por exemplo, um plugin construído para múltiplas versões do aplicativo host;
Ganchos de lançamento personalizados (como operações pós-lançamento) podem ser adicionados como plug-ins;
Possui um recurso de bloqueio de tempo, que permite recriar resoluções antigas (pacotes mais recentes são ignorados);
As definições de pacote são um arquivo único e sucinto;
Os pacotes definem seu efeito no ambiente (adicionando ao PATH etc.) de maneira independente de plataforma e shell, usando uma API python dedicada;
Possui um sistema de cache baseado em memcached, para cache de resoluções de ambiente;
Possui um recurso de filtragem de pacotes, permitindo lançamentos de pacotes em etapas, como pacotes alfa e beta.
Se você encontrar um bug, precisar de ajuda ou quiser falar com os desenvolvedores, aqui está uma lista das diferentes maneiras de entrar em contato conosco:
Informar um problema
Sala de bate-papo: entre no canal #rez
Iniciar uma discussão
Lista de discussão: Observe que eles são bem menos ativos na lista de discussão do que em qualquer outro canal de comunicação.
Atualmente, as compilações do CMake não funcionam no Windows com Rez e os testes relacionados são ignorados. Uma correção requer várias alterações que estão no roteiro. Os usuários implementaram com sucesso soluções alternativas para utilizar o CMake com Rez no Windows, mas o objetivo é fornecer uma experiência perfeita em qualquer plataforma no futuro. Para obter detalhes, consulte este problema