Подключение внешних библиотек в python

Post on 18-Feb-2017

725 Views

Category:

Technology

16 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Скрещиваем ежа с ужом или как подружить питон

и…Шаламов Максим

ведущий Python-разработчик в Rambler&Co

40 50+ 500+ 1500 млн человек

суммарная аудитория группы количество изданий, сервисов и проектов

разработчиков человек в хорошей компании

Livejournal

Gazeta.ru

Begun Price Ferra

Redigo

Letidor

Канобу

Видео

Секрет фирмы

Рамблер Инфографика

Новости Почта

Финансы Недвижимость

Погода Гороскопы

Субботний Рамблер Путешествия

Касса Еда

Город

Воздух

Волна Рестораны

Мослента

Lenta.ru

Афиша

Motor

Championat Quto

Рамблер

Видеостудия

Языки и технологии

Контакты

В группе компаний Rambler&Co всегда есть открытые вакансии для тех, кто хочет профессионально расти и развиваться,

занимаясь тем, что по-настоящему нравится

hr@rambler-co.ru

www.rambler-co.ru/jobs !

Python отличный язык

• Много синтаксического сахара

• Много батареек

• Большое сообщество

Что обычно относят к недостаткам

• Медленный

• Нет реальной многопоточности

О чем пойдет речь?• Как решить указанные проблемы с использованием языка С

• Cython

• C extension

• SWIG

• FFI

• ctypes

• cffi

Но использовать С так сложно…

Зачем нам подключать внешние библиотеки

• Увеличение скорости работы алгоритмов

• Реальная многопоточность

• Использование уже существующего функционала, написанного на C

CPython native C extensions

• Относительно сложно и долго

• Тема для отдельного доклада

• Пример: https://goo.gl/lq3NZS

• Пример: http://goo.gl/wfpn2V

Что такое Cython?• Язык программирования, упрощающий написание модулей С/С++ кода для Python.

• Код Cython преобразуется в С/С++ код для последующей компиляции.

• Поддерживает прямой вызов функций и методов С/С++ из кода на Cython и строгую типизацию переменных, классов, атрибутов классов.

• Имеет очень близкий синтаксис к Python.

Как это работает?• Пишем код в файле с расширением pyx

• В setup.py файле указываем параметры компиляции

• Компилируем: python setup.py build_ext —inplace

• Импортируем полученный результат как обычный модуль

Пример (файл fib.pyx)

Пример (setup.py)

Минусы

• Пока есть несовместимости с CPython, которые планируют устранить к версии 1.0

• Это новый язык

Полезные ссылки

• Работа с numpy (http://goo.gl/P42HyT)

• Перевод документации v0.15 (http://goo.gl/a76BvY)

SWIG

• Создает часть оберток на С/C++, часть на Python

• Есть особенности под разные платформы

SWIG (общий подход)

• Нам нужен файл с кодом *.c

• Создаем интерфейсный файл *.i, в котором описываем подключенный файл и функции

• Выполняем команды компиляции

• Импортируем полученный модуль в код на Python

Полезные ссылки

• Пример на русском: http://goo.gl/yCX6EO

• Документация: http://goo.gl/rNQxtQ

FFI - Foreign Function Interface

• интерфейс вызова внешних функций

• позволяет программам, написанным на одном языке вызывать программы написанные на другом языке

Плюсы ffi

• ffi расширения можно компилировать или подключать в runtime

• ffi расширения мультиплатформенные

• ffi расширения просты для понимания и написания

libffi

• Она обеспечивает интерфейс на языке С для вызова функций во время выполнения, а не во время компиляции

• Может указывать на функцию, которая обрабатывает любое количество аргументов определенных в runtime

ffi в python

• ctypes

• cffi

ctypes• это C-расширение, ссылающееся на libffi и Python код для связки с ней

• позволяет вызвать внешние C-функции из Python кода

• может использоваться для написания оберток над внешними библиотеками

• часть стандартной библиотеки Python

• Минусы:

• сложный api

ctypes пример

• Опустим реализацию функции merge

ctypes пример

Полезные ссылки

• Документация: https://goo.gl/FBfdrK

• Пример на русском: http://goo.gl/bv7BTt

• Пример с opencv: https://goo.gl/cpzLMt

cffi• Нужны знания только языков C и Python

• Основная логика пишется на Python, на C пишется только то, что необходимо

• Позволяет избежать излишних C-объявлений, сам находит объявление функций и переменных

• Работа с С-библиотекой, как с Python библиотекой

• Минусы

• Не входит в стандартную библиотеку Python

cffi (пример)

cffi (пример 2)

cffi (пример 2)

Полезные ссылки

• Документация: http://goo.gl/K15xMS

• Пример: https://goo.gl/DYOjc2

cffi vs ctypes

• Делают одно и тоже

• Дело вкуса

Личное мнение• Самый сложный и мощный инструмент:

• C extensions

• Самый простой и удобный инструмент:

• cffi, ctypes

• Самый простой способ ускорить алгоритм:

• Cython

• Самой простой способ подключать C++ библиотеки:

• SWIG, Cython

Вопросы

Спасибо за внимание

Контакты

В группе компаний Rambler&Co всегда есть открытые вакансии для тех, кто хочет профессионально расти и развиваться,

занимаясь тем, что по-настоящему нравится

hr@rambler-co.ru

www.rambler-co.ru/jobs !

top related