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-Dep
にPy2-Dep
一部のパッケージがある場合もう一つのバッグです>=
。
これは別の複雑さを引き起こすので、この条件を構築するためにパッケージを見つける必要があるかもしれません。