适用于 Python 2.x 的通用 RPM 包

适用于 Python 2.x 的通用 RPM 包

我有一个 python 应用程序,它可以在 Python >= 2.6 上运行,并且与架构无关。

我需要将该应用程序的 rpm 包安装在 Fedora 14(python 2.7)和 Centos 6.2(python 2.6)上。

我目前使用mock为每个“风格”构建一个 rpm 包,效果很好。我显然无法在 Fedora 上安装 Centos 编译的 rpm。

它给了我这个错误信息:

error: Failed dependencies:
    python(abi) = 2.6 is needed by myapp-0.9.el6.noarch

这是我的 .spec 文件的相关部分:

%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}

Name:           myapp
Version:        #VERSION#
Release:        #RELEASE#%{dist}
Summary:        myapp

Group:          Development/Languages
License:        Apache v2
Source0:        %{name}-%{version}-#RELEASE#.tar.gz
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildArch:      noarch

BuildRequires: python-devel
BuildRequires: python-setuptools


%description
myapp

%prep
%setup -c


%build
%{__python} setup.py build

%install
%{__rm} -rf %{buildroot}

%{__python} setup.py install -O1 --skip-build --root %{buildroot}

我是否真的必须使用mock并构建 2 个 rpm,或者是否有其他方法可以创建单个通用 2.x rpm 包

答案1

Python 文件在构建时进行字节编译,这就是为什么它们需要特定的 Python 版本才能运行。正确的方法是使用单独的包,但应该可以编写一个 specfile,它只安装.py源文件,因此不需要特定的 Python 版本。不过,您可能需要处理将文件放入/usr/lib/python2.X/site-packages您关心的所有目录中。

相关内容