Red Hat Training

A Red Hat training course is available for RHEL 8

5.5. Python 3 RPM 패키지

대부분의 Python 프로젝트는 패키징을 위해 Setuptools를 사용하고 setup.py 파일에 패키지 정보를 정의합니다. Setuptools 패키지에 대한 자세한 내용은 Setuptools 설명서 를 참조하십시오.

Python 프로젝트를 RPM 패키지로 패키징할 수도 있습니다. 이 패키지는 Setuptools 패키징에 비해 다음과 같은 이점을 제공합니다.

  • 다른 RPM에 대한 패키지의 종속 항목 사양 (Python이 아닌)
  • 암호화 서명

    암호화 서명을 사용하면 RPM 패키지의 콘텐츠를 다른 운영 체제와 함께 확인, 통합 및 테스트할 수 있습니다.

5.5.1. Python 패키지에 대한 SPEC 파일 설명

SPEC 파일에는 rpmbuild 유틸리티에서 RPM을 빌드하는 데 사용하는 지침이 포함되어 있습니다. 지침은 일련의 섹션에 포함되어 있습니다. SPEC 파일에는 섹션이 정의된 두 가지 주요 부분이 있습니다.

  • Preamble (본문에 사용되는 일련의 메타데이터 항목 포함)
  • 본문 (명령어의 주요 부분을 포함)

Python 프로젝트용 RPM SPEC 파일에는 Python RPM SPEC 파일에 비해 몇 가지 특정 사항이 있습니다. 특히 Python 라이브러리의 모든 RPM 패키지 이름에는 항상 버전 확인 접두사(예: Python 3.6의 경우 python3, Python 3.8, python39 for Python 3.9의 경우 python39 또는 Python 3.11의 경우 python3.11 )가 포함되어야 합니다.

기타 세부 사항은 python3-detox 패키지에 대한 다음 SPEC 파일 예에 나와 있습니다. 이러한 세부 사항에 대한 자세한 내용은 예제 아래에 있는 노트를 참조하십시오.

%global modname detox                                                1

Name:           python3-detox                                        2
Version:        0.12
Release:        4%{?dist}
Summary:        Distributing activities of the tox tool
License:        MIT
URL:            https://pypi.io/project/detox
Source0:        https://pypi.io/packages/source/d/%{modname}/%{modname}-%{version}.tar.gz

BuildArch:      noarch

BuildRequires:  python36-devel                                       3
BuildRequires:  python3-setuptools
BuildRequires:  python36-rpm-macros
BuildRequires:  python3-six
BuildRequires:  python3-tox
BuildRequires:  python3-py
BuildRequires:  python3-eventlet

%?python_enable_dependency_generator                                 4

%description

Detox is the distributed version of the tox python testing tool. It makes efficient use of multiple CPUs by running all possible activities in parallel.
Detox has the same options and configuration that tox has, so after installation you can run it in the same way and with the same options that you use for tox.

    $ detox

%prep
%autosetup -n %{modname}-%{version}

%build
%py3_build                                                           5

%install
%py3_install

%check
%{__python3} setup.py test                                           6

%files -n python3-%{modname}
%doc CHANGELOG
%license LICENSE
%{_bindir}/detox
%{python3_sitelib}/%{modname}/
%{python3_sitelib}/%{modname}-%{version}*

%changelog
...
1
modname 매크로에는 Python 프로젝트의 이름이 포함되어 있습니다. 이 예에서는 detox 입니다.
2
Python 프로젝트를 RPM에 패키징할 때 python3 접두사를 항상 프로젝트의 원래 이름에 추가해야 합니다. 원래 이름은 detox 이고 RPM의 이름은 python3-detox 입니다.
3
BuildRequires 는 이 패키지를 빌드하고 테스트하는 데 필요한 패키지를 지정합니다. BuildRequires에는 항상 Python 패키지( python36-develpython3-setuptools )를 빌드하는 데 필요한 툴을 제공하는 항목이 포함되어 있습니다. /usr/bin/python3 인터프리터 지시문이 있는 파일이 자동으로 /usr/bin/python3.6 으로 변경되도록 python36-rpm-macros 패키지가 필요합니다.
4
모든 Python 패키지는 제대로 작동하기 위해 다른 패키지가 필요합니다. 이러한 패키지도 SPEC 파일에서 지정해야 합니다. 종속 항목을 지정하려면 %python_enable_dependency_generator 매크로를 사용하여 setup.py 파일에 정의된 종속성을 자동으로 사용할 수 있습니다. 패키지에 Setuptools를 사용하여 지정되지 않은 종속 항목이 있는 경우 추가 Requires 지시문으로 지정합니다.
5
%py3_build%py3_install 매크로는 각각 setup.py buildsetup.py install 명령을 실행하여 설치 위치를 지정하는 추가 인수, 사용할 인터프리터 및 기타 세부 정보를 제공합니다.
6
확인 섹션에서는 Python의 올바른 버전을 실행하는 매크로를 제공합니다. %{__python3} 매크로에는 Python 3 인터프리터의 경로가 포함되어 있습니다(예: /usr/bin/python3 ). 항상 리터럴 경로가 아닌 매크로를 사용하는 것이 좋습니다.

5.5.2. Python 3 RPM용 공통 매크로

SPEC 파일에서 항상 값을 하드 코딩하지 않고 다음 Macros for Python 3 RPMs 테이블에 설명된 매크로를 사용합니다.

매크로 이름에서 버전이 없는 python 대신 항상 python3 또는 python2 를 사용합니다. SPEC 파일의 BuildRequires 섹션에 있는 특정 Python 3 버전을 python36-rpm-macros,python38-rpm-macros,python39-rpm-macros, python3.11-rpm-macros 로 구성합니다.

표 5.3. Python 3 RPM용 매크로

macro일반 정의설명

%{__python3}

/usr/bin/python3

Python 3 인터프리터

%{python3_version}

3.6

Python 3 인터프리터의 전체 버전입니다.

%{python3_sitelib}

/usr/lib/python3.6/site-packages

여기서 pure-Python 모듈이 설치됩니다.

%{python3_sitearch}

/usr/lib64/python3.6/site-packages

아키텍처별 확장을 포함하는 모듈이 설치된 위치.

%py3_build

 

시스템 패키지에 적합한 인수를 사용하여 setup.py build 명령을 실행합니다.

%py3_install

 

시스템 패키지에 적합한 인수를 사용하여 setup.py install 명령을 실행합니다.

5.5.3. Python RPM에 자동 제공

Python 프로젝트를 패키징할 때 이러한 디렉터리가 있는 경우 결과 RPM에 다음 디렉터리가 포함되어 있는지 확인합니다.

  • .dist-info
  • .egg-info
  • .egg-link

이러한 디렉토리에서 RPM 빌드 프로세스는 가상 pythonX.Ydist 를 자동으로 생성합니다(예: python3.6dist(detox) ). 이러한 가상은 %python_enable_dependency_generator 매크로에 의해 지정된 패키지에서 사용됩니다.