5장. Python 3 RPM 패키징


DNF 패키지 관리자를 사용하여 시스템에 Python 패키지를 설치할 수 있습니다. DNF 는 소프트웨어에 대한 다운스트림 제어를 제공하는 RPM 패키지 형식을 사용합니다.

Python 프로젝트를 RPM 패키지로 패키징하면 기본 Python 패키지와 비교하여 다음과 같은 이점이 있습니다.

  • Python 및 Python이 아닌 패키지에 대한 종속성은 DNF 패키지 관리자에 의해 엄격하게 적용됩니다.
  • 패키지에 암호화 방식으로 서명할 수 있습니다. 암호화 서명을 사용하면 RPM 패키지의 내용을 다른 운영 체제와 검증, 통합 및 테스트할 수 있습니다.
  • 빌드 프로세스 중에 테스트를 실행할 수 있습니다.

네이티브 Python 패키지의 패키징 형식은 PyPA(Python Packaging Authority) 사양으로 정의됩니다. 지금까지 대부분의 Python 프로젝트는 setup.py 파일에서 패키지 정보를 패키징하고 정의하는 데 distutils 또는 setuptools 유틸리티를 사용했습니다. 그러나 기본 Python 패키지를 생성할 가능성은 시간이 지남에 따라 진화했습니다.

  • setup.py 파일을 사용하는 Python 소프트웨어를 패키징하려면 이 문서를 따르십시오.
  • pyproject.toml 파일로 최신 패키지를 패키징하려면 pyproject-rpm-macrosREADME 파일을 참조하십시오. pyproject-rpm-macros 는 지원되지 않는 패키지가 포함된 CRB(CodeReady Linux Builder) 리포지토리에 포함되어 있으며 시간이 지남에 따라 최신 Python 패키징 표준을 지원할 수 있습니다.

5.1. 예제 Python 패키지에 대한 사양 파일 설명

Python 프로젝트의 RPM 사양 파일에는 Python이 아닌 RPM 사양 파일과 비교하여 몇 가지 특정 사항이 있습니다.

python3- 접두사를 포함하려면 Python 라이브러리의 모든 RPM 패키지 이름에 사용하는 것이 좋습니다.

python3-pello 패키지의 다음 예제에서 Python RPM 사양 파일 관련 노트를 참조하십시오.

Python으로 작성된 pello 프로그램의 SPEC 파일의 예

%global python3_pkgversion 3                                          
1


Name:           python-pello                                          
2

Version:        1.0.2
Release:        1%{?dist}
Summary:        Example Python library

License:        MIT
URL:            https://github.com/fedora-python/Pello
Source:         %{url}/archive/v%{version}/Pello-%{version}.tar.gz

BuildArch:      noarch
BuildRequires:  python%{python3_pkgversion}-devel                     
3


# Build dependencies need to be specified manually
BuildRequires:  python%{python3_pkgversion}-setuptools

# Test dependencies need to be specified manually
# Runtime dependencies need to be BuildRequired manually to run tests during build
BuildRequires:  python%{python3_pkgversion}-pytest >= 3


%global _description %{expand:
Pello is an example package with an executable that prints Hello World! on the command line.}

%description %_description

%package -n python%{python3_pkgversion}-pello                         
4

Summary:        %{summary}

%description -n python%{python3_pkgversion}-pello %_description


%prep
%autosetup -p1 -n Pello-%{version}


%build
# The macro only supports projects with setup.py
%py3_build                                                            
5



%install
# The macro only supports projects with setup.py
%py3_install


%check                                                                
6

%pytest


# Note that there is no %%files section for python-pello
%files -n python%{python3_pkgversion}-pello
%doc README.md
%license LICENSE.txt
%{_bindir}/pello_greeting

# The library files needed to be listed manually
%{python3_sitelib}/pello/

# The metadata files needed to be listed manually
%{python3_sitelib}/Pello-*.egg-info/
Copy to Clipboard Toggle word wrap

1
python3_pkgversion 매크로를 정의하면 이 패키지가 빌드될 Python 버전을 설정합니다. 기본 Python 버전 3.12 에 대해 빌드하려면 행을 제거합니다.
2
Python 프로젝트를 RPM에 패키징할 때 항상 python- 접두사를 프로젝트의 원래 이름에 추가합니다. 여기에 프로젝트 이름은 Pello 이며, 따라서 소스 RPM(SRPM)의 이름은 python-pello 입니다.
3
BuildRequires 는 이 패키지를 빌드하고 테스트하는 데 필요한 패키지를 지정합니다. BuildRequires 에서 항상 Python 패키지를 빌드하는 데 필요한 도구를 제공하는 항목을 포함합니다. python3-devel 과 사용자가 패키징하는 특정 소프트웨어에 필요한 관련 프로젝트(예: python3-setuptools 또는 %check 섹션에서 테스트를 실행하는 데 필요한 런타임 및 테스트 종속 항목)를 포함합니다.
4
바이너리 RPM의 이름(사용자가 설치할 수 있는 패키지)을 선택할 때 버전이 지정된 Python 접두사를 추가합니다. 기본 Python 3.12에 python3- 접두사를 사용합니다. 예를 들어 이후 버전의 Python을 사용할 수 있는 경우와 같이 기본 Python 버전 3.12 의 경우 3 으로 평가되는 %{python3_pkgversion} 매크로를 사용할 수 있습니다.
5
%py3_build%py3_install 매크로는 설치 위치, 사용할 인터프리터 및 기타 세부 정보를 지정하는 추가 인수와 함께 setup.py buildsetup.py install 명령을 각각 실행합니다.
참고

setuptools 패키지의 setup.py buildsetup.py install 명령을 사용하는 것은 더 이상 사용되지 않으며 향후 주요 RHEL 릴리스에서 제거됩니다. 대신 pyproject-rpm-macros 를 사용할 수 있습니다.

6
%check 섹션은 패키지된 프로젝트의 테스트를 실행합니다. 정확한 명령은 프로젝트 자체에 따라 다르지만 %pytest 매크로를 사용하여 RPM 친화적인 방식으로 pytest 명령을 실행할 수 있습니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat