Cython (.pyx) code in Python

This tutorial will show you how to use Cython (.pyx) in Python. Cython is a superset of Python that compiles to C. Cython modules can be used to speed up some parts of your project as C is a very fast language.

A Cython module must be compiled before it can be used and this compilation happens in two stages. A Cyton module (hello.pyx) is first compiled to a C-file (hello.c), the .c file is then compiled to a .pyd file (Windows). I am going to compile Cython code from the command-prompt by using a setup file (setup.py) in this tutorial. You will need the following libraries: numpy, Cython and setuptools. Remember that names is case sensitive in Python.

Cython modules

I have created two simple Cython modules: hello.pyx and date_and_time.pyx. These files is stored under annytab/cython in my project. The contents of these files is shown below.

# File: annytab/cython/hello.pyx

# Say hello to someone
def say_hello_to(name):
    print("Hello %s!" % name)
# File: annytab/cython/date_and_time.pyx

# Import libraries
cimport cpython.datetime

# Get today's date and time
def now():
    print("Today's date and time: %s" % cpython.datetime.datetime.now())

Setup file

A setup file (setup.py) is used to compile my two Cython modules, the setup file is stored in the same folder as the .pyx files. The contents of the file is shown below.

# Import libraries
import numpy
import setuptools
import Cython.Build

# Compile Cython files
setuptools.setup(name = 'Hello', ext_modules = Cython.Build.cythonize('hello.pyx'), include_dirs=[numpy.get_include()])
setuptools.setup(name = 'Date and Time', ext_modules = Cython.Build.cythonize('date_and_time.pyx'), include_dirs=[numpy.get_include()])

Compilation

Open the command prompt, search for cmd if you can’t find it. Browse to the folder where your setup.py file is located and type python setup.py build_ext --inplace. You must have added a path to Python in environment variables for this to work, read Install Python and libraries with Visual Studio if you need help with this.

Microsoft Windows [Version 10.0.18363.476]
(c) 2019 Microsoft Corporation. Med ensamrätt.

C:\WINDOWS\system32>cd C:\DATA\Python-projects\Iris\Iris\annytab\cython

C:\DATA\Python-projects\Iris\Iris\annytab\cython>python setup.py build_ext --inplace

Use modules

The compilation process saved files to the directory where the setup file is located. Now I am able to call methods in my Cython modules from Python modules.

# Import libraries
import annytab.cython.hello
import annytab.cython.date_and_time

# Say hello
annytab.cython.hello.say_hello_to('Wayne Gretzky')

# Get today's date and time
annytab.cython.date_and_time.now()

Leave a Reply

Your email address will not be published. Required fields are marked *