16.5. Python 스크립트에서 인터프리터 지시문 처리
Red Hat Enterprise Linux 8에서 실행 가능한 Python 스크립트는 주요 Python 버전을 명시적으로 지정하는 인터프리터 지시문(Hashbangs 또는 shebangs)을 사용해야 합니다. 예를 들면 다음과 같습니다.
RPM 패키지를 빌드할 때 /usr/lib/rpm/redhat/brp-mangle-shebangs BRP(Buildroot Policy) 스크립트가 자동으로 실행되며 모든 실행 파일에서 인터프리터 지시문을 수정하려고 시도합니다.
BRP 스크립트는 다음과 같은 모호한 인터프리터 지시문으로 Python 스크립트를 찾을 때 오류를 생성합니다.
#!/usr/bin/python
#!/usr/bin/python
또는
#!/usr/bin/env python
#!/usr/bin/env python
16.5.1. Python 스크립트에서 인터프리터 지시문 수정 링크 복사링크가 클립보드에 복사되었습니다!
RPM 빌드 시 빌드 오류를 일으키는 Python 스크립트에서 인터프리터 지시문을 수정합니다.
사전 요구 사항
- Python 스크립트의 인터프리터 지시문 중 일부는 빌드 오류가 발생합니다.
절차
인터프리터 지시문을 수정하려면 다음 작업 중 하나를 완료합니다.
platform-python-devel패키지에서pathfix.py스크립트를 적용합니다.pathfix.py -pn -i %{__python3} PATH …# pathfix.py -pn -i %{__python3} PATH …Copy to Clipboard Copied! Toggle word wrap Toggle overflow 여러 개의
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
BuildRequires: python36-rpm-macrosCopy to Clipboard Copied! Toggle word wrap Toggle overflow 결과적으로 사용자 정의 패키지의
/usr/bin/python3인터프리터 지시문은 자동으로/usr/bin/python3.6으로 변환됩니다.
BRP 스크립트가 인터프리터 지시문을 확인하고 수정하지 못하게 하려면 다음 RPM 지시문을 사용합니다.
%undefine __brp_mangle_shebangs
%undefine __brp_mangle_shebangs