python3がインストールされていない場合は、python2用のrpmをビルドします。

python3がインストールされていない場合は、python2用のrpmをビルドします。

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

2つの方法があります。

すでに最初の項目の概要を説明していますが、慎重な考えが必要です。つまり、次のことを行います。

%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-DepPy2-Dep一部のパッケージがある場合もう一つのバッグです>=

これは別の複雑さを引き起こすので、この条件を構築するためにパッケージを見つける必要があるかもしれません。

おすすめ記事