16.4. Python 3 RPM 패키지
대부분의 Python 프로젝트에서는 패키징에 Setuptools를 사용하고 setup.py 파일에서 패키지 정보를 정의합니다. Setuptools 패키징에 대한 자세한 내용은 Setuptools 설명서 를 참조하십시오.
Setuptools 패키징과 비교하여 다음과 같은 이점을 제공하는 RPM 패키지로 Python 프로젝트를 패키징할 수도 있습니다.
- 다른 RPM에 패키지의 종속성 사양 (Python이 아닌 경우)
암호화 서명
암호화 서명을 사용하면 RPM 패키지의 콘텐츠를 나머지 운영 체제와 함께 검증, 통합 및 테스트할 수 있습니다.
16.4.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
Name: python3-detox
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
BuildRequires: python3-setuptools
BuildRequires: python36-rpm-macros
BuildRequires: python3-six
BuildRequires: python3-tox
BuildRequires: python3-py
BuildRequires: python3-eventlet
%?python_enable_dependency_generator
%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
%install
%py3_install
%check
%{__python3} setup.py test
%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.6python36-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)가 포함되어 있습니다.리터럴 경로가 아닌 매크로를 항상 사용하는 것이 좋습니다.
16.4.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.
| 매크로 | 일반 정의 | 설명 |
|---|---|---|
| %{__python3} | /usr/bin/python3 | Python 3 인터프리터 |
| %{python3_version} | 3.6 | Python 3 인터프리터의 전체 버전입니다. |
| %{python3_sitelib} | /usr/lib/python3.6/site-packages | net-Python 모듈이 설치된 위치. |
| %{python3_sitearch} | /usr/lib64/python3.6/site-packages | 아키텍처별 확장 기능이 포함된 모듈이 설치된 위치. |
| %py3_build |
시스템 패키지에 적합한 인수를 사용하여 | |
| %py3_install |
시스템 패키지에 적합한 인수를 사용하여 |
16.4.3. Python RPM 자동 제공 링크 복사링크가 클립보드에 복사되었습니다!
Python 프로젝트를 패키징할 때 이러한 디렉터리가 있는 경우 결과 RPM에 다음 디렉터리가 포함되어 있는지 확인합니다.
-
.dist-info -
.egg-info -
.egg-link
이러한 디렉토리에서 RPM 빌드 프로세스는 자동으로 가상 pythonX.Ydist 를 생성합니다(예: python3.6dist(detox ). 이러한 가상 제공은 %python_enable_dependency_generator 매크로로 지정된 패키지에 의해 사용됩니다.