python2를 실행하는 오래된 시스템이 여전히 있기 때문에 python2와 python3 모두에서 실행될 수 있는 Python 애플리케이션을 패키징하고 싶습니다.
기본값은 python3이어야 하지만 python3이 설치되지 않은 경우입니다. Python2용으로 빌드하고 싶습니다. 이름을 변경하지 않고:
나는 여기의 지침을 따랐습니다.https://docs.fedoraproject.org/en-US/packaging-guidelines/Python_Appendix/#_conditionalizing_the_python_2_parts
나는 이것을 시도했습니다 :
%global srcname example
# Disable python2 by default
%bcond_with python2
Name: python-%{srcname}
Version: 1.2.3
Release: 1%{?dist}
Summary: An example python module
License: MIT
URL: https://pypi.python.org/pypi/%{srcname}
Source0: %pypi_source
BuildArch: noarch
%global _description %{expand:
A python module which provides a convenient example.}
%description %_description
%if %{with python2}
%package -n python2-%{srcname}
Summary: %{summary}
BuildRequires: python2-devel
%description -n python2-%{srcname} %_description
%endif
%package -n python3-%{srcname}
Summary: %{summary}
BuildRequires: python3-devel
%description -n python3-%{srcname} %_description
%prep
%autosetup -n %{srcname}-%{version}
%build
%if %{with python2}
%py2_build
%endif
%py3_build
%install
# Must do the python2 install first because the scripts in /usr/bin are
# overwritten with every setup.py install, and in general we want the
# python3 version to be the default.
%if %{with python2}
%py2_install
%endif
%py3_install
%check
%if %{with python2}
%{python2} setup.py test
%endif
%{python3} setup.py test
%if %{with python2}
%files -n python2-%{srcname}
%license COPYING
%doc README.rst
%{python2_sitelib}/%{srcname}/
%{python2_sitelib}/%{srcname}-*.egg-info/
%endif
%files -n python3-%{srcname}
%license COPYING
%doc README.rst
%{python3_sitelib}/%{srcname}/
%{python3_sitelib}/%{srcname}-*.egg-info/
%{_bindir}/sample-exec
%changelog
하지만 항상 두 가지를 모두 빌드하려고 시도하지만 실패하므로 패키지 이름을 변경해야 합니다. 예를 들어 패키지 이름이 python2-%{srcname}.
동일해야 하며 Python 모듈이 아니고 독립 실행형 프로그램입니다.
답변1
두 가지 방법이 있습니다.
이미 첫 번째 항목의 개요를 설명했지만 신중한 생각이 필요합니다. 즉, 다음과 같은 작업을 수행합니다.
%if 0%{?rhel_version} < 800
Requires: policycoreutils-python
%else
Requires: policycoreutils-python-utils
%endif
RHEL-7.X에 대해 1RPM, RHEL-8.X에 대해 1RPM을 빌드하는 경우 빌드 시 버전 변수를 전달 하고 빌드 중에 RPM으로 작성된 rpmbuild
명령문을 결정하기 위해 템플릿 작성을 수행합니다. Requires
.
이는 2개의 RPM을 갖게 되며 이 2개의 RPM은 별도로 호스팅되어야 함을 의미합니다.
또 다른 방법은 부울 종속성을 사용하는 것입니다.속도(링크) RHEL(링크), 이 기능은 "새로운》 (몇 년 전에 출시된 CentOS/RHEL-7 플랫폼에서는 지원해야 합니다).
마치 RHEL보다 패키지가 훨씬 쉽기 AMAZON Linux 2023
때문에 조준하는 척하겠습니다.python-unversioned-command
Requires: ( Py3-Dep or Py2-Dep )
Requires: ( ( python-unversioned-command >= 3.0.0 and Py3-Dep ) or ( python-unversioned-command < 3.0.0 and Py2-Dep ) )
기본적 으로 Py3-Dep
및Py2-Dep
일부 패키지가 있는 경우또 다른 가방 이에요 >=
.
이로 인해 별도의 복잡성이 발생하므로 이 조건을 구축하려면 패키지를 찾아야 할 수도 있습니다.