From Fedora Project Wiki

m (→‎Naming: add link to current python package naming guidelines)
Line 28: Line 28:
== Naming ==
== Naming ==
(to be written)
(to be written)
Current python package naming guidelines are here:
[[Packaging/NamingGuidelines#Addon_Packages_.28python_modules.29]]


== Layout ==
== Layout ==

Revision as of 21:21, 29 October 2009

Packaging Python modules for Python 3

I hope to add a parallel-installable Python 3 stack to Fedora 13.

See the feature page: https://fedoraproject.org/wiki/Features/Python3F13 and also this thread: https://www.redhat.com/archives/fedora-devel-list/2009-October/msg00054.html

This requires us to come up with a sane way to package Python 3 modules, and this requires us to generalize our python packaging rules to support more than one python runtime.

The existing Python packaging guidelines are here: Packaging/Python

Runtimes

There will be multiple python runtimes, one for each supported major/minor release combination.

Each runtime corresponds to a binary of the form /usr/bin/python$MAJOR.$MINOR

One of these python runtimes is the "system runtime". It can be identified by the destination of the symlink /usr/bin/python

The output of "rpm -q --provides" of each runtime rpm MUST contain a line of the form:

 Provides: python-abi-$MAJOR-$MINOR-$MAGIC

For example, a python-2.7 runtime rpm with ABI 62171 should have this output:

 Provides: python-abi-2.7-62171

and another with ABI 62181 should have this output:

 Provides: python-abi-2.7-62181

(this is a change from current guidelines, to allow for different runtimes to be installable in parallel, and allowing for multiple magic numbers)

Naming

(to be written)

Current python package naming guidelines are here: Packaging/NamingGuidelines#Addon_Packages_.28python_modules.29

Layout

Proposed rule: All files with an extension of .py/.pyo/.pyc MUST be either

  • within a runtime package, and below /usr/lib/python$MAJOR-$MINOR for that runtime, or
  • for a specific runtime package, and below /usr/lib/python$MAJOR-$MINOR/site-packages for that runtime, or
  • for the system python runtime.

For example, python code for the 3.1 runtime needs to be below /usr/lib/python3.1/site-packages

.pyo/.pyc files

Compiled .pyo/.pyc files embed a magic number, indicating which python version they are for; python libraries have a corresponding magic number.

Proposed rule: All .pyo/.pyc files below /usr/lib/python$MAJOR.$MINOR MUST have a magic number corresponding to that for /usr/bin/python$MAJOR.$MINOR

Thus e.g. /usr/lib/python2.6/site-packages/libxml2.pyc must have the same magic number as that of /usr/bin/python2.6

Similarly, /usr/lib/python3.1/site-packages/libxml2.pyc must have the same magic number as that of /usr/bin/python3.1

TODO: write an rpmlint test for this. See initial work here: https://www.zarb.org/pipermail/rpmlint-discuss/2009-October/000775.html and here: http://dmalcolm.fedorapeople.org/rpmlint/add-tests-for-python-bytecode-files.patch