IPython: вызов библиотеки C из Python с помощью Cython

IPython безусловно очень удобная штука. Быстрая отладка идеи на Python, стабильная и быстрая работа, куча плагинов, делающих эту оболочку просто незаменимой.

Однако в этот раз мне необходимо использовать библиотеку написанную на языке C. А хочу я все это делать в IPython. Конечно, кроме написания C-кода.

Все будет работать в связке с Cython. Язык Cython был создан для получения python-пакетов, работающих также быстро, как-будто они написаны на C/С++ с возможностью написания кода в стиле схожем с Python. Бонусом идет удобная и быстрая возможность обертки C/C++-библиотек для Python.

Примеры реализованы под Linux. При повторении данного примера под Windows необходимо будет сделать предварительную подготовку, установить компилятор MinGW и настроить все пути.

Первым делом определяем директорию и создаем новый блокнот IPython. В эту директорию кладем файл [code]c.c[/code] с кодом на C.

[code c]

[/code]
файл c.c, код на C

Далее будем работать в блокноте Ipython и все куски кода вставляем в отдельные ячейки. Включаем cython-магию в ipython.

[code python]

[/code]
ipython, ячейка 1

Создаем файл [code]c_call.pyx[/code] с заголовком функции из C.

[code python]

[/code]
ipython, ячейка 2

Создаем python-скрипт [code]setup.py[/code] для компиляции библиотеки и заголовочного файла в python-пакет.

[code python]

[/code]
ipython, ячейка 3

Запускаем созданный на предыдущем шаге файл [code]setup.py[/code] для компиляции в текущую директорию C-библиотеки вместе с заголовочным файлом и оберткой от Cython.

[code python]

[/code]
ipython, ячейка 4

Запускаем получившийся винегрет и наслаждаемся.

[code python]

[/code]
ipython, ячейка 5

Репозиторий с кодом.