5.5. Python 3 RPM 패키지
대부분의 Python 프로젝트는 패키징을 위해 Setuptools를 사용하고 setup.py
파일에 패키지 정보를 정의합니다. Setuptools 패키지에 대한 자세한 내용은 Setuptools 설명서 를 참조하십시오.
Python 프로젝트를 RPM 패키지로 패키징할 수도 있습니다. 이 패키지는 Setuptools 패키징에 비해 다음과 같은 이점을 제공합니다.
- 다른 RPM에 대한 패키지의 종속 항목 사양 (Python이 아닌)
암호화 서명
암호화 서명을 사용하면 RPM 패키지의 콘텐츠를 다른 운영 체제와 함께 확인, 통합 및 테스트할 수 있습니다.
5.5.1. Python 패키지에 대한 사양 파일 설명
spec
파일에는 rpmbuild
유틸리티에서 RPM을 빌드하는 데 사용하는 지침이 포함되어 있습니다. 지침은 일련의 섹션에 포함되어 있습니다. 사양
파일에는 섹션이 정의된 두 가지 주요 부분이 있습니다.
- Preamble (본문에 사용되는 일련의 메타데이터 항목 포함)
- 본문 (명령어의 주요 부분을 포함)
Python 프로젝트용 RPM SPEC 파일에는 Python RPM SPEC 파일에 비해 몇 가지 특정 사항이 있습니다. 특히 Python 라이브러리의 모든 RPM 패키지의 이름에는 항상 버전을 결정하는 접두사를 포함해야 합니다(예: Python 3.6, Python 3.8, python38
용 python38, Python 3.9용 python3.11
, Python 3.11용 python3.11 또는 Python 3.12용 python3.12).
다른 세부 사항은 python3-detox
패키지에 대한 다음 사양
파일 예제에 표시됩니다. 이러한 세부 사항에 대한 자세한 내용은 예제 아래에 있는 노트를 참조하십시오.
%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-devel
및python3-setuptools
)를 빌드하는 데 필요한 툴을 제공하는 항목이 포함되어 있습니다./usr/bin/python3
인터프리터 지시문이 있는 파일이 자동으로/usr/bin/python3.6
으로 변경되도록python36-rpm-macros
패키지가 필요합니다. - 4
- 모든 Python 패키지는 제대로 작동하기 위해 다른 패키지가 필요합니다. 이러한 패키지는
사양
파일에도 지정해야 합니다. 종속 항목을 지정하려면 %python_enable_dependency_generator 매크로를 사용하여setup.py
파일에 정의된 종속성을 자동으로 사용할 수 있습니다. 패키지에 Setuptools를 사용하여 지정되지 않은 종속성이 있는 경우 추가Requires
지시문 내에 지정합니다. - 5
- %py3_build 및 %py3_install 매크로는 각각
setup.py build
및setup.py install
명령을 실행하여 설치 위치를 지정하는 추가 인수, 사용할 인터프리터 및 기타 세부 정보를 제공합니다. - 6
- 확인 섹션에서는 Python의 올바른 버전을 실행하는 매크로를 제공합니다. %{__python3} 매크로에는 Python 3 인터프리터의 경로가 포함되어 있습니다(예:
/usr/bin/python3
). 항상 리터럴 경로가 아닌 매크로를 사용하는 것이 좋습니다.
5.5.2. Python 3 RPM용 공통 매크로
사양
파일에서 항상 값을 하드 코딩하지 않고 다음 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
또는 python3.12-rpm-macros
.
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 |
시스템 패키지에 적합한 인수를 사용하여 | |
%py3_install |
시스템 패키지에 적합한 인수를 사용하여 |
5.5.3. Python RPM에 자동 제공
Python 프로젝트를 패키징할 때 이러한 디렉터리가 있는 경우 결과 RPM에 다음 디렉터리가 포함되어 있는지 확인합니다.
-
.dist-info
-
.egg-info
-
.egg-link
이러한 디렉토리에서 RPM 빌드 프로세스는 가상 pythonX.Ydist
를 자동으로 생성합니다(예: python3.6dist(detox)
). 이러한 가상은 %python_enable_dependency_generator 매크로에 의해 지정된 패키지에서 사용됩니다.