Single generic package for python 2.x

Panu Matilainen pmatilai at laiskiainen.org
Thu Jan 12 11:13:26 UTC 2012


On 01/12/2012 12:41 PM, Raphaël De GIUSTI wrote:
> I have a python application, it can run on Python>= 2.6 and it's
> architecture independant.
> I need the rpm package of this application to be installed on Fedora 14
> (python 2.7) and Centos 6.2 (python 2.6).
> I currently use mock to build one rpm package for each "flavour" and it
> works well.
>
> Do I really have to use mock and build 2 rpms or is there another way to
> create a single generic python 2.x rpm package ?
>
> Because apparently I can't install the Centos compiled rpm on Fedora.
> It gives me this error message :
>
> **************************************************************
> error: Failed dependencies:
> python(abi) = 2.6 is needed by myapp-0.9.el6.noarch
> **************************************************************
>
> Here is the relevant part of my .spec file :
>
> *******************************************************************************************************************************************************************
> %{!?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))")}

If the software installs anything into python library paths, then it the 
resulting *package* is dependent on the python version used when 
building: eg python 2.6 will not look into python 2.7 library paths, so 
it will not work.

In addition there's the issue (which rpm dependencies dont currently 
enforce) with any of byte-compiled files (.pyc and .pyo) included in the 
package: they should be compiled with the version of python used to run 
them. IIRC python silently falls back to non-bytecompiled versions on 
version mismatch if it cannot replace the byte-compiled files, so it 
works but non-optimally. And if run as root, python will silently 
rewrite the byte-compiled versions which in turn causes rpm verify to 
light up like a x-mas tree.

So yes, you should really build separate packages for distros where the 
python version differs.

	- Panu -



More information about the Rpm-list mailing list