
rez를 사용해 환경을 구성할 때, 특정 패키지 안에 모듈이나 소프트웨어를 추가하고 환경 변수를 관리하는 방법에 대해 알아보자.
rez-build 명령어의 패키지 빌드는 일반적으로 package.py와 이에 의해 호출되는 파일에 의해 이루어진다.
rez-env 명령어로 환경이 구성될 때 호출되는 패키지에 의해 각종 환경 변수와 모듈, 소프트웨어 등을 해당 환경에 포함하게 한다.
다음은 package.py의 예시이다.
name = "my_pyside2_package"
version = "1.0.0"
description = "A sample package that includes PySide2."
authors = ["Your Name"]
requires = ["python-3.7+", "pyside2"]
build_command = "python {root}/build.py"
def commands():
env.PYTHONPATH.append("{root}/python")
# 추가적인 환경 변수 설정이 필요할 경우 여기에 추가할 수 있습니다.
다음은 위의 예시에서 사용된 package.py에서 사용자가 직접 정의할 수 있는 속성들이다.
패키지 속성에 대한 자세한 내용은 여기에서 확인할 수 있다.
name = "my_pyside2_package"version = "1.0.0"description = "A sample package that includes PySide2."authors = ["Your Name"]+, <등을 이용해 버전을 다양하게 설정할 수 있다requires = ["python-3.7+", "pyside2"]{root}는 package.py가 존재하는 디렉토리의 경로이다build_command = "python {root}/build.py"
rez환경으로 전환될 때 실행됨def commands():
env.PYTHONPATH.append("{root}/python")
env.PATH.prepend("{root}/bin")
# 추가적인 환경 변수 설정이 필요할 경우 여기에 추가할 수 있습니다.package.py와 그에 의해 호출되는 build.py를 통해 ffmpeg 프레임워크를 포함한 패키지를 구성해보자.
"ffmpeg" 패키지에서 파이썬 3.7.x 버전을 사용하도록 "python-3.7"을 requires에 추가했고,
build.py에서 패키지 경로에 복사 될 ffmpeg를 사용할 수 있도록 PATH 환경변수를 추가했다.
또한 python3로 build.py를 실행하기 위해 build_command에 해당 명령어를 작성했다.
# package.py
name = "ffmpeg"
version = "1.0.0"
description = "env for ffmpeg framework and python3"
authors = ["username"]
requires = ["python-3.7"]
build_command = "python3 {root}/build.py"
def commands():
env.PATH.append("/home/username/packages/ffmpeg/1.0.0")
build.py에서는 ffmpeg를 특정 경로에 다운로드 및 압축을 해제하여 패키지로 복사하는 작업을 하도록 했다.
# build.py
import os
def get_ffmpeg()
tar_path = "/home/username/Downloads/ffmpeg-4.2.4.tar.xz"
extracted_tar = "/home/username/Downloads/ffmpeg-4.2.4"
save_path = "/home/username/Downloads"
ffmpeg_path = "/home/username/packages/ffmpeg/1.0.0/ffmpeg"
if not os.path.exists(save_path):
os.makedirs(save_path)
if not os.path.exists(ffmpeg_path):
if not os.path.exists(tar_path):
# ffmpeg-4.2.4를 특정 경로에 다운로드
os.system(f"wget https://ffmpeg.org/releases/ffmpeg-4.2.4.tar.xz -P /home/username/Downloads")
if not os.path.exists(extracted_tar):
# 파일 압축 해제
os.system(f"cd /home/username/Downloads && tar -xf {tar_path}")
# ffmpeg 파일을 패키지로 복사
os.system(f"cd {extracted_tar} && cp ./ffmpeg /home/username/packages/ffmpeg/1.0.0")
else:
# ffmpeg가 이미 존재하는 경우 pass
print("ffmpeg already exists")
pass
get_ffmpeg()
작성이 완료된 packge.py와 build.py가 존재하는 디렉토리에서 rez-build --install 명령어를 실행하여 패키지를 로컬에 설치한다.
-p PATH 또는 --prefix PATH 옵션으로 패키지가 설치될 경로를 지정할 수도 있다.
]$ rez-build --install
================================================================================
Building ffmpeg-1.0.0...
================================================================================
Resolving build environment: python
resolved by username@workstation.local, on Fri May 31 14:07:38 2024, using Rez v3.1.1
requested packages:
python
~platform==linux (implicit)
~arch==x86_64 (implicit)
~os==rocky-9.4 (implicit)
resolved packages:
arch-x86_64 /RAPA/packages/arch/x86_64
os-rocky-9.4 /RAPA/packages/os/rocky-9.4
platform-linux /RAPA/packages/platform/linux
python-3.9.18 /RAPA/packages/python/3.9.18/platform-linux/arch-x86_64/os-rocky-9.4
Invoking custom build system...
Running build command: python /home/username/builder/ffmpeg/build.py install
python /home/username/builder/ffmpeg/build.py
================================================================================
Build Summary
================================================================================
All 1 build(s) were successful.
rez-build로 설치된 패키지를 rez환경으로 전환하여 ffmpeg를 정상적으로 불러오는지 확인해보자.
]$ rez-env ffmpeg
You are now in a rez-configured environment.
resolved by username@workstation.local, on Fri May 31 14:12:42 2024, using Rez v3.1.1
requested packages:
ffmpeg
~platform==linux (implicit)
~arch==x86_64 (implicit)
~os==rocky-9.4 (implicit)
resolved packages:
arch-x86_64 /home/username/packages/arch/x86_64
ffmpeg-1.0.0 /home/username/packages/ffmpeg/1.0.0
os-rocky-9.4 /home/username/packages/os/rocky-9.4
platform-linux /home/username/packages/platform/linux
python-3.9.18 /home/username/packages/python/3.9.18/platform-linux/arch-x86_64/os-rocky-9.4
> ]$ which ffmpeg
/home/username/packages/ffmpeg/1.0.0/ffmpeg
패키지 내부의 ffmpeg를 정상적으로 인식한 것을 알 수 있다.
이처럼 사용자가 자유롭게 패키지를 구성 및 수정할 수 있는 것이 rez의 장점 중 하나이다.
이미지 출처: rez 3.1.1 documentation