From ArchWiki
Jump to: navigation, search

From Wikipedia:

Python is a widely used high-level, general-purpose, interpreted, dynamic programming language. Its design philosophy emphasizes code readability, and its syntax allows programmers to express concepts in fewer lines of code than possible in languages such as C++ or Java. The language provides constructs intended to enable writing clear programs on both a small and large scale.
Python supports multiple programming paradigms, including object-oriented, imperative and functional programming or procedural styles. It features a dynamic type system and automatic memory management and has a large and comprehensive standard library.


Python 3

Python 3 is the latest version of the language, and is incompatible with Python 2. The language is mostly the same, but many details, especially how built-in objects like dictionaries and strings work, have changed considerably, and a lot of deprecated features have finally been removed. Also, the standard library has been reorganized in a few prominent places. For an overview of the differences, visit Python2orPython3 and their relevant chapter in Dive into Python 3.

To install the latest version of Python 3, install the python package from the official repositories.

If you would like to build the latest RC/betas from source, visit Python Downloads. The Arch User Repository also contains good PKGBUILDs. If you do decide to build the RC, note that the binary (by default) installs to /usr/local/bin/python3.x.

Python 2

To get the latest version of Python 2, install the python2 package from the official repositories.

Python 2 will happily run alongside Python 3. You need to specify python2 in order to run this version.

Any program requiring Python 2 needs to point to /usr/bin/python2, instead of /usr/bin/python, which points to Python 3. To do so, open the program or script in a text editor and change the first line. The line will show one of the following:

#!/usr/bin/env python



In both cases, just change python to python2 and the program will then use Python 2 instead of Python 3.

Another way to force the use of python2 without altering the scripts is to call it explicitly with python2:

$ python2

Finally, you may not be able to control the script calls, but there is a way to trick the environment. It only works if the scripts use #!/usr/bin/env python. It will not work with #!/usr/bin/python. This trick relies on env searching for the first corresponding entry in the PATH variable.

First create a dummy folder:

$ mkdir ~/bin

Then add a symlink python to python2 and the config scripts in it:

$ ln -s /usr/bin/python2 ~/bin/python
$ ln -s /usr/bin/python2-config ~/bin/python-config

Finally put the new folder at the beginning of your PATH variable:

$ export PATH=~/bin:$PATH
Note: This method of changing environment variables is not permanent and is only active in the current terminal session.

To check which python interpreter is being used by env, use the following command:

$ which python

A similar approach in tricking the environment, which also relies on #!/usr/bin/env python to be called by the script in question, is to use a #Virtual environment.

Old versions

Warning: Python versions before 2.7 and 3.4 have not received any updates—including security patches—since at least 2014. Using older versions for Internet-facing applications or untrusted code may be dangerous and is not recommended.

Old versions of Python are available via the AUR and may be useful for historical curiosity, old applications that do not run on current versions, or for testing Python programs intended to run on a distribution that comes with an older version (e.g. RHEL 5.x has Python 2.4, or Ubuntu 12.04 has Python 3.2):

Extra modules/libraries for old versions of Python may be found on the AUR by searching for python<version without period>, e.g. searching for "python26" for 2.6 modules.

Package management

Although a great number of Python packages are readily available in the official repositories and the AUR, the Python ecosystem provides its own package managers for use with PyPI, the Python Package Index.

  • pip — The PyPA tool for installing Python packages. || python-pip, python2-pip
  • setuptools — Easily download, build, install, upgrade, and uninstall Python packages. || python-setuptools, python2-setuptools

For a brief history and feature comparison between the two, see pip vs easy_install.

Authoritative best practices in Python package management are detailed here.

Note: There are also tools integrating pip with pacman by automatically generating PKGBUILDs for specified pip-packages: pipman-gitAUR, pip2arch-gitAUR

Widget bindings

The following widget toolkit bindings are available:

  • TkInter — Tk bindings || standard module
  • pyQtQt bindings || python2-pyqt4 python2-pyqt5 python-pyqt4 python-pyqt5
  • pySideQt bindings || python2-pyside python-pyside || pygtk
  • PyGObjectGTK+ 2/3 bindings via GObject Introspection || python2-gobject2 python2-gobject python-gobject2 python-gobject
  • wxPython — wxWidgets bindings || wxpython

To use these with Python, you may need to install the associated widget kits.

Tips and tricks


IPython is an enhanced Python command line available in the official repositories as ipython and ipython2. If you want the IPython notebook, install jupyter-notebook for the IPython3 notebook and ipython2-notebook for the IPython2 notebook. Run

$ jupyter notebook

to autostart the browser and run the IPython kernel. You can select the python version when creating the notebook in the browser.

bpython is a ncurses interface to the Python interpreter, available in the official repositories as bpython and bpython2.

Virtual environment

Python provides tools to create isolated environments in which you can install packages without interfering with the other virtual environments nor with the system Python's packages. It could change the python interpreter used for a specific application.

See Python/Virtual environment for details.

Getting completion in Python2 shell

Note: This is relevant only for Python 2, tab completion is enabled by default since Python 3.4.

Copy this into Python's interactive shell:

import rlcompleter
import readline
readline.parse_and_bind("tab: complete")



Dealing with version problem in build scripts

Many projects' build scripts assume python to be Python 2, and that would eventually result in an error — typically complaining that print 'foo' is invalid syntax. Luckily, many of them call python from the PATH instead of hardcoding #!/usr/bin/python in the shebang line, and the Python scripts are all contained within the project tree. So, instead of modifying the build scripts manually, there is a workaround. Create /usr/local/bin/python with content like this:

script=$(readlink -f -- "$1")
case "$script" in (/path/to/project1/*|/path/to/project2/*|/path/to/project3*)
    exec python2 "$@"

exec python3 "$@"

Where /path/to/project1/*|/path/to/project2/*|/path/to/project3* is a list of patterns separated by | matching all project trees.

Do not forget to make it executable:

# chmod +x /usr/local/bin/python

Afterwards scripts within the specified project trees will be run with Python 2.

See also