16.5. Python 스크립트에서 인터프리터 지시문 처리
Red Hat Enterprise Linux 8에서 실행 가능한 Python 스크립트는 주요 Python 버전을 명시적으로 지정하는 인터프리터 지시문(Hashbangs 또는 shebangs)을 사용해야 합니다. 예를 들면 다음과 같습니다.
#!/usr/bin/python3
#!/usr/bin/python3.6
#!/usr/bin/python3.8
#!/usr/bin/python3.9
#!/usr/bin/python3.11
#!/usr/bin/python3.12
#!/usr/bin/python2
RPM 패키지를 빌드할 때 /usr/lib/rpm/redhat/brp-mangle-shebangs BRP(Buildroot Policy) 스크립트가 자동으로 실행되며 모든 실행 파일에서 인터프리터 지시문을 수정하려고 시도합니다.
BRP 스크립트는 다음과 같은 모호한 인터프리터 지시문으로 Python 스크립트를 찾을 때 오류를 생성합니다.
#!/usr/bin/python
또는
#!/usr/bin/env python
16.5.1. Python 스크립트에서 인터프리터 지시문 수정 링크 복사링크가 클립보드에 복사되었습니다!
RPM 빌드 시 빌드 오류를 일으키는 Python 스크립트에서 인터프리터 지시문을 수정합니다.
사전 요구 사항
- Python 스크립트의 인터프리터 지시문 중 일부는 빌드 오류가 발생합니다.
절차
인터프리터 지시문을 수정하려면 다음 작업 중 하나를 완료합니다.
platform-python-devel패키지에서pathfix.py스크립트를 적용합니다.# pathfix.py -pn -i %{__python3} PATH …여러 개의
PATHs를 지정할 수 있습니다.PATH가 디렉터리인 경우pathfix.py는 모호한 인터프리터 지시문이 있는^[a-zA-Z0-9_]+\.py$패턴과 일치하는 Python 스크립트를 재귀적으로 스캔합니다. 이 명령을%prep섹션 또는%install섹션 끝에 추가합니다.-
패키지된 Python 스크립트를 수정하여 예상되는 형식을 준수하도록 합니다. 이를 위해
pathfix.py도 RPM 빌드 프로세스 외부에서 사용할 수 있습니다. RPM 빌드 외부에서pathfix.py를 실행하는 경우 위의 예제에서%{__python3}을/usr/bin/python3과 같은 인터프리터 지시문 경로로 바꿉니다.
패키지된 Python 스크립트에 Python 3.6 이외의 버전이 필요한 경우 필수 버전을 포함하도록 이전 명령을 조정합니다.
16.5.2. 사용자 정의 패키지의 /usr/bin/python3 인터프리터 지시문 변경 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로, /usr/bin/python3 형식의 인터프리터 지시문은 Red Hat Enterprise Linux의 시스템 도구에 사용되는 platform-python 패키지에서 Python을 가리키는 인터프리터 지시문으로 교체됩니다. 사용자 지정 패키지의 /usr/bin/python3 인터프리터 지시문을 AppStream 리포지토리에서 설치한 특정 Python 버전을 가리키도록 변경할 수 있습니다.
절차
특정 버전의 Python에 대한 패키지를 빌드하려면 각
하위 패키지를python패키지의python*-rpm-macrosspec파일의 BuildRequires 섹션에 추가합니다. 예를 들어 Python 3.6의 경우 다음 행을 포함합니다.BuildRequires: python36-rpm-macros결과적으로 사용자 정의 패키지의
/usr/bin/python3인터프리터 지시문은 자동으로/usr/bin/python3.6으로 변환됩니다.
BRP 스크립트가 인터프리터 지시문을 확인하고 수정하지 못하게 하려면 다음 RPM 지시문을 사용합니다.
%undefine __brp_mangle_shebangs