Débuter avec cython

Bonjour le monde

Un fichier Cython pyx doit être traduit en code C (cythonisé) et compilé avant de pouvoir être utilisé à partir de Python. Une approche courante consiste à créer un module d’extension qui est ensuite importé dans un programme Python.

Code

Pour cet exemple, nous créons trois fichiers :

  • hello.pyx contient le code Cython.
  • test.py est un script Python qui utilise l’extension hello.
  • setup.py est utilisé pour compiler le code Cython.

bonjour.pyx

from libc.math cimport pow

cdef double square_and_add (double x):
    """Compute x^2 + x as double.

    This is a cdef function that can be called from within
    a Cython program, but not from Python.
    """
    return pow(x, 2.0) + x

cpdef print_result (double x):
    """This is a cpdef function that can be called from Python."""
    print("({} ^ 2) + {} = {}".format(x, x, square_and_add(x)))

test.py

# Import the extension module hello.
import hello

# Call the print_result method 
hello.print_result(23.0)

setup.py

from distutils.core import Extension, setup
from Cython.Build import cythonize

# define an extension that will be cythonized and compiled
ext = Extension(name="hello", sources=["hello.pyx"])
setup(ext_modules=cythonize(ext))

Compilation

Cela peut être fait en utilisant cython hello.pyx pour traduire le code en C, puis le compiler en utilisant gcc. Un moyen plus simple est de laisser distutils gérer cela :

$ ls
hello.pyx  setup.py  test.py
$ python setup.py build_ext --inplace
$ ls
build  hello.c  hello.cpython-34m.so  hello.pyx  setup.py  test.py

Le fichier d’objet partagé (.so) peut être importé et utilisé à partir de Python, nous pouvons donc maintenant exécuter le test.py :

$ python test.py
(23.0 ^ 2) + 23.0 = 552.0 

Installation de Cython

Pour utiliser Cython, deux choses sont nécessaires. Le package Cython lui-même, qui contient le compilateur source à source cython et les interfaces Cython vers plusieurs bibliothèques C et Python (par exemple numpy). Pour compiler le code C généré par le compilateur cython, un compilateur C est nécessaire.

Étape 1 : Installer Cython

Indépendant du système

Cython peut être installé avec plusieurs systèmes de gestion de paquets indépendants du système. Ceux-ci inclus:

  1. PyPI via pip ou easy_install :

    $ pip install cython
    $ easy_install cython
    
  2. anaconda en utilisant conda :

    $ conda install cython
    
  3. Canopée pensée à l’aide du gestionnaire de paquets enpkg :

    $ enpkg cython
    

Le code source peut également être téléchargé depuis github et installé manuellement à l’aide de :

$ python setup.py install

Ubuntu, Debian

Pour Ubuntu, les packages cython et cython3 sont disponibles. Notez que ceux-ci fournissent une version plus ancienne que les options d’installation mentionnées ci-dessus.

$ apt-get install cython cython3

Les fenêtres

Pour Windows, un fichier .whl pouvant être installé à l’aide de pip est fourni par un tiers. Les détails sur l’installation d’un fichier .whl sous Windows peuvent être trouvés [ici][2].


Étape 2 : Installer un compilateur C

Pour compiler les fichiers C générés par Cython, un compilateur pour C et C++ est nécessaire. Le compilateur gcc est recommandé et peut être installé comme suit.

Ubuntu, Debian

Le paquet build-essential contient tout ce qui est nécessaire. Il peut être installé à partir des référentiels en utilisant :

$ sudo apt-get install build-essential

MAC

Les outils de développement XCode contiennent un compilateur de type gcc.

Les fenêtres

MinGW (GNU minimaliste pour Windows) contient une version Windows de gcc. Le compilateur de Visual Studio peut également être utilisé.

[1] : http://cython.org/#download [2] : http://stackoverflow.com/questions/27885397/how-do-i-install-a-python-package-with-a-whl-file