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