Introduction

Python, the high-level, interactive object oriented language, includes an extensive class library with lots of goodies for network programming, system administration, sounds and graphics. Debian always provides at least two versions of Python, the latest stable Python 2 release, and the latest stable Python 3 release. It may also provide additional versions, as well as tons of third party packages. Python is an important part of the Debian ecosystem.

Software written in the Python programming language is executed by the Python interpreter. It is usually compiled into platform-independent bytecode files to increase performance. Python compiles and writes bytecode *.pyc files alongside the *.py sources. Extension modules can also be written in C, which are distributed as .so shared libraries.

Therefore, software written in pure Python can be distributed as source code or as compiled bytecode. The latter is similar to Java.

Python in Debian

As such, with hundreds of Python modules and multiple versions of Python supported, Debian is the largest "integrated Python distribution". Users of other operating systems (e.g. Windows and OS X) can also benefit from this integrative effort by means of virtualization (e.g. see NeuroDebian VM page for easy way to start)

Debian Python Policy for Python developers

if you want to maintain a Python package, you have to know how the Debian Development works.

Deviations from upstream

Debian distributions modify upstream Python in a few ways that are important to understand. Of course, where at all possible, we try to minimize deviations from upstream, but here is an enumeration of the changes you might encounter on a Debian system (and derivatives, such as Ubuntu).

dist-packages instead of site-packages. Third party Python software installed from Debian packages goes into dist-packages, not site-packages. This is to reduce conflict between the system Python, and any from-source Python build you might install manually.

The standard profile and pstats modules are not included, due to restrictive redistribution clauses in their license that don’t meet the DFSG. cProfile and hotshot are however included.

In Debian 7 (Wheezy), the python-setuptools package installs the Distribute fork instead of the standard setuptools. In Debian 8 (Jessie), we reverted back to the merged setuptools project.

Also in Debian 7 (Wheezy), the python-virtualenv also uses distribute by default, but can enable classic setuptools with an optional switch. As above, in Debian 8 (Jessie) this just use the merged setuptools.

distutils setup scripts install files in /usr/local/ not sys.prefix (which is normally /usr/). This is because /usr/ is reserved for files installed from Debian packages. Note that /usr/local/lib/pythonX.Y/dist-packages is in sys.path so that modules not installed from Debian packages can still be accessed by the system Python. Tools like debhelper pass the --install-layout=deb option to the setup script while building a Debian package so that its installs files into /usr/ not /usr/local/.