첫 글에서 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: 패키지의 이름 예) mayaversion: 설치하는 프로그램의 버전 예) 2024.0.2description: 해당 프로그램의 첨부 내용 requires: 패키지의 요구 사항def commands(): 패키지가 환경에 연결되었을 때, 경로를 붙여 함께 실행PATH에 bin디렉토리의 실행파일 끌어옴, PYTHONPATH python 경로 추가화자는 별도의 추가 파일을 만들어 연결해 주었습니다.
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 미만을 포함하는 환경을 생성하라는 명령입니다.
| 실행 | 설명 | 요청버전 |
|---|---|---|
| maya | maya의 모든 버전 | maya2019, maya2022, maya20023, maya2024 |
| maya-2023 | maya-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+<2024 | maya-2022이상 <2024미만 | maya2022.1.0.1, maya2023 |
| maya<2023 | 2023미만의 maya버전 | maya2022, maya2022.1.0.1 |
| maya==2023 | 버전 2023만 해당 | maya-2023 |
패키지의 빌드와 관련된 명령어는 다음과 같이 사용할 수 있습니다:
maya의 모든 버전: 모든 버전의 maya를 실행합니다.$ rez-env maya -- maya2019, maya2022, maya2023, maya2024
$ rez-env maya-2023 -- maya-2023.0.2.0, maya-2023.1.2.1, maya-2023.0.2.1
maya-2022+:maya-2022 이상 버전을 실행합니다.$ rez-env maya-2022+ -- maya2022, maya2022.1.0.1, maya2023, maya2024, maya2024.1.2
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
maya<2023: 2023 미만의 maya 버전을 실행합니다.$ rez-env maya<2023 -- maya2022, maya2022.1.0.1
maya==2023: 2023 버전만 해당됩니다.$ rez-env maya==2023 -- maya-2023.0.2.0, maya-2023.1.2.1
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는 패키지 버전을 특정 범위 내로 제한하되, 그 패키지의 존재를 필수로 요구하지 않는 경우에 사용됩니다. 다음 예를 통해 알아보겠습니다:
$ 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를 더욱 효과적으로 사용하기 위해 이 연산자들의 개념과 사용법을 잘 이해해 두는 것이 좋습니다.