Comenzando con cython

Hola Mundo

Un archivo pyx de Cython debe traducirse a código C (cythonized) y compilarse antes de que pueda usarse desde Python. Un enfoque común es crear un módulo de extensión que luego se importa en un programa de Python.

Código

Para este ejemplo creamos tres archivos:

  • hello.pyx contiene el código Cython.
  • test.py es un script de Python que usa la extensión hello.
  • setup.py se usa para compilar el código de Cython.

hola.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)))

prueba.py

# Import the extension module hello.
import hello

# Call the print_result method 
hello.print_result(23.0)

configuración.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))

Compilando

Esto se puede hacer usando cython hello.pyx para traducir el código a C y luego compilarlo usando gcc. Una forma más fácil es dejar que distutils maneje esto:

$ 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

El archivo de objeto compartido (.so) se puede importar y usar desde Python, por lo que ahora podemos ejecutar test.py:

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

Instalación de Cython

Para usar Cython se necesitan dos cosas. El paquete Cython en sí, que contiene el compilador de fuente a fuente cython y las interfaces de Cython para varias bibliotecas de C y Python (por ejemplo, numpy). Para compilar el código C generado por el compilador cython, se necesita un compilador C.

Paso 1: Instalación de Cython

Agnóstico del sistema

Cython se puede instalar con varios sistemas de administración de paquetes independientes del sistema. Éstos incluyen:

  1. PyPI a través de pip o easy_install:

    $ pip install cython
    $ easy_install cython
    
  2. anaconda usando conda:

    $ conda install cython
    
  3. Toldo pensado usando el administrador de paquetes enpkg:

    $ enpkg cython
    

Además, el código fuente se puede descargar desde github e instalarlo manualmente usando:

$ python setup.py install

##Ubuntu, Debian ##

Para Ubuntu están disponibles los paquetes cython y cython3. Tenga en cuenta que estos proporcionan una versión más antigua que las opciones de instalación mencionadas anteriormente.

$ apt-get install cython cython3

Ventanas

Para Windows, un tercero proporciona un [archivo .whl] (http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython) que se puede instalar mediante pip. Los detalles sobre la instalación de un archivo .whl en Windows se pueden encontrar aquí.


Paso 2: Instalación de un compilador de C

Para compilar los archivos C generados por Cython, se necesita un compilador para C y C++. Se recomienda el compilador gcc y se puede instalar de la siguiente manera.

##Ubuntu, Debian ## El paquete build-essential contiene todo lo que se necesita. Se puede instalar desde los repositorios usando:

$ sudo apt-get install build-essential

MAC

Las [herramientas de desarrollo de XCode] (https://developer.apple.com/xcode/) contienen un compilador similar a gcc.

Ventanas

MinGW (GNU minimalista para Windows) contiene una versión para Windows de gcc. También se puede utilizar el compilador de Visual Studio.