rez환경 설치 후 packges.py 만들기

sonnie·2024년 6월 11일
0

rez

목록 보기
2/2
post-thumbnail

rez환경 설치 후 packges.py 만들기

첫 글에서 rez-env 설치하고, packges.py를 빌드하는 법을 공부했다면 그다음 단계로 넘어가보자

패키지 생성하기

  • 패키지는 버전마다 독립적인 성격을 갖고 있습니다.
  • package.py에는 패키지를 사용하기 위해 알아야 할 모든 패키지의 내용이 기재되어 있습니다 .

다음은 패키지.py의 내용입니다.

name = "foo"

version = "1.0.0"

description = "Something that does foo-like things."

requires = [
   "python-2.6",
   "utils-1.1+<2"
]

tools = [
   "fooify"
]

def commands():
   env.PYTHONPATH.append("{root}/python")
   env.PATH.append("{root}/bin")
  • name: 패키지의 이름 예) maya
  • version: 설치하는 프로그램의 버전 예) 2024.0.2
  • description: 해당 프로그램의 첨부 내용
  • requires: 패키지의 요구 사항
  • def commands(): 패키지가 환경에 연결되었을 때, 경로를 붙여 함께 실행
    여기서는 PATHbin디렉토리의 실행파일 끌어옴, PYTHONPATH python 경로 추가
  • 메차

실제로 Maya 프로그램 설치를 위한 packge.py를 작성한 예시입니다.

화자는 별도의 추가 파일을 만들어 연결해 주었습니다.

name = "maya"
version = "24.0.0"

description = "env for shotgrid-maya"

authors = ["td_grunde_sun"]

# CUSTOM :추가 파일을 끌어 오도록 함.
build_command = """
python {root}/build.py {install} 
python {root}/get_maya.py
"""

def commands():
    # 실행 경로
    env.PATH.append(f"/userpath/maya/{version}/maya2024/bin")
    # 파이썬 경로
    env.PYTHONPATH.append("/userpath/python")
    # CUSTOM: custom_menubar 경로
    env.PYTHONPATH.append("/userpsth/scripts")
# get_maya.py

import os

origin_path = "/usr/autodesk"
version = "24.0.0"
new_path = f"/home/packages/maya/{version}"
dirs = os.listdir(origin_path)

for dir_name in dirs:
...생략...

패키지를 빌드하면 저장되는 곳.

package.py 작성 후 rez-build를 하면 패키지가 따로 빌드되어 생성며, 패키지 저장소에 설치가 됩니다.

/packages/maya/22.1
              /23.2
              /24.0
              
/packages/nuke/12.3
              /13.2
              /14.0
              
/packages/houdini/19.5
                 /20.0
                 /21.2

# more detailed example of maya-24.0
/packages/maya/24.0/package.py
                   /python/<PYTHON FILES>
                   /bin/<EXECUTABLES>

packge.py파일은 패키지 설치 루트에 있어야만 합니다. 패키지의 나머지 부분(예: python및 bin디렉터리)의 레이아웃은 전적으로 패키지 자체 빌드에 따라 결정됩니다. 또한 패키지의 commands부분이 설치와 일치해야 합니다. 예를 들어 maya의 Python 파일 및 바이너리 경로가 지정한 패키지 명령과 일치하는지 확인해 볼 수 있습니다.

확장 경로 입니다. {root}/python {root}/bin

패키지 작성에대한 자세한 내용은 공식홈페이지를 참고하세요

패키지 실행하기

패키지 실행시 여러 버전을 동시에 실행시키는 방법입니다.

]$ rez-env 'python-3.7+' 'maya-22.4+<24.0'

rez 환경에서의 패키지 실행은 여러 패키지 버전과 특수 구문이 포함된 문자열입니다. package.py 파일의 require에서 패키지 요청을 하고 rez-env를 사용하여 구성된 환경을 생성합니다 .

예를 들어, 다음은 Python 버전 3.7 이상, maya 버전 22.4 이상, 24.0 미만을 포함하는 환경을 생성하라는 명령입니다.

실행설명요청버전
mayamaya의 모든 버전maya2019, maya2022, maya20023, maya2024
maya-2023maya-2023[.x.x.x]모든 버전maya-2023.0.2.0, maya-2023.1.2.1, maya-2023.0.2.1
maya-2022+maya-2022이상maya2022, maya2022.1.0.1, maya2023, maya2024, maya2024.1.2
maya-2022.1.0.1+<2024maya-2022이상 <2024미만maya2022.1.0.1, maya2023
maya<20232023미만의 maya버전maya2022, maya2022.1.0.1
maya==2023버전 2023만 해당maya-2023

패키지의 빌드와 관련된 명령어는 다음과 같이 사용할 수 있습니다:

  1. maya의 모든 버전: 모든 버전의 maya를 실행합니다.
$ rez-env maya -- maya2019, maya2022, maya2023, maya2024
  1. 'maya-2023'의 특정 버전: maya-2023의 특정 버전을 실행합니다.
$ rez-env maya-2023 -- maya-2023.0.2.0, maya-2023.1.2.1, maya-2023.0.2.1
  1. maya-2022+:maya-2022 이상 버전을 실행합니다.
$ rez-env maya-2022+ -- maya2022, maya2022.1.0.1, maya2023, maya2024, maya2024.1.2
  1. maya-2022.1.0.1+<2024: maya-2022.1.0.1 이상 2024 미만 버전을 실행합니다.
$ rez-env maya-2022.1.0.1+<2024 -- maya2022.1.0.1, maya2023
  1. maya<2023: 2023 미만의 maya 버전을 실행합니다.
$ rez-env maya<2023 -- maya2022, maya2022.1.0.1
  1. maya==2023: 2023 버전만 해당됩니다.
$ rez-env maya==2023 -- maya-2023.0.2.0, maya-2023.1.2.1

Conflict Operator와 Weak Reference Operator

rez를 사용하다 보면 패키지의 호환성이나 특정 버전의 사용 여부를 세밀하게 조정해야 할 때가 많습니다. 이를 위해 rez는 두 가지 특별한 연산자를 제공합니다: Conflict Operator와 Weak Reference Operator입니다. 이 글에서는 이 두 연산자의 개념과 사용법을 자세히 알아보겠습니다.

Conflict Operator (! 연산자)
Conflict Operator는 패키지 간의 비호환성을 정의하거나 특정 패키지 버전의 사용을 금지할 때 사용됩니다. 예를 들어, 다음 명령을 살펴보겠습니다:

$ rez-env maya_utils '!maya-2015.6'

이 명령은 maya_utils의 모든 버전을 요구하지만, maya-2015.6 버전(또는 2015.6.1 등의 하위 버전 포함)은 허용하지 않는다는 뜻입니다. 즉, 특정 버전의 Maya를 제외하고 다른 버전의 Maya와 함께 환경을 구성할 때 유용합니다.

Weak Reference Operator (~ 연산자)

Weak Reference Operator는 패키지 버전을 특정 범위 내로 제한하되, 그 패키지의 존재를 필수로 요구하지 않는 경우에 사용됩니다. 다음 예를 통해 알아보겠습니다:

$ rez-env nuek '~nuke-9.rc2'

이 명령은 nuke 패키지의 요구 사항에 따라 nuke 패키지가 포함될 수도 있고 포함되지 않을 수도 있습니다. 하지만 nuke 패키지가 포함되는 경우, 그 버전은 반드시 9.rc2 범위 내에 있어야 합니다.

Weak Reference Operator는 특정 애플리케이션이 자체적으로 포함하는 버전의 파이썬을 사용할 때 유용합니다. 예를 들어, nuke나 maya와 같은 애플리케이션은 자체적으로 파이썬 버전을 포함하고 있을 수 있습니다. 이 애플리케이션들의 rez 패키지에서는 파이썬에 대한 명시적인 요구 사항이 없을 수 있지만, 다른 파이썬 라이브러리와의 호환성을 유지하기 위해 특정 파이썬 버전을 약하게 참조할 수 있습니다.

다음은 maya의 package.py 예제입니다:

# maya
# package.py

requires = [
   "~python-2.7.3"
]

이 예제는 maya가 환경에 포함될 때, 다른 파이썬 라이브러리들이 python-2.7.3 버전을 사용하도록 보장합니다.

결론

Conflict Operator와 Weak Reference Operator는 rez 환경에서 패키지 간의 호환성을 관리하는 데 매우 유용한 도구입니다. 이 연산자들을 적절히 사용하면 패키지 버전 충돌을 피하고, 원하는 버전의 패키지를 유연하게 관리할 수 있습니다. rez를 더욱 효과적으로 사용하기 위해 이 연산자들의 개념과 사용법을 잘 이해해 두는 것이 좋습니다.

profile
VFX TD 꿈나무

0개의 댓글