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

38
Скрещиваем ежа с ужом или как подружить питон иШаламов Максим ведущий Python-разработчик в Rambler&Co

Upload: maxim-shalamov

Post on 18-Feb-2017

725 views

Category:

Technology


16 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

Livejournal

Gazeta.ru

Begun Price Ferra

Redigo

Letidor

Канобу

Видео

Секрет фирмы

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

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

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

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

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

Касса Еда

Город

Воздух

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

Мослента

Lenta.ru

Афиша

Motor

Championat Quto

Рамблер

Видеостудия

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

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

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

Контакты

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

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

[email protected]

www.rambler-co.ru/jobs !

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

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

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

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

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

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

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

• Медленный

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

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

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

• Cython

• C extension

• SWIG

• FFI

• ctypes

• cffi

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

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

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

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

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

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

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

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

CPython native C extensions

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример (setup.py)

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

Минусы

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

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

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

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

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

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

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

SWIG

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

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

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

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

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

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

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

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

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

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

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

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

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

FFI - Foreign Function Interface

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

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

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

Плюсы ffi

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

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

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

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

libffi

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

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

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

ffi в python

• ctypes

• cffi

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

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

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

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

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

• Минусы:

• сложный api

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

ctypes пример

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

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

ctypes пример

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

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

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

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

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

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

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

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

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

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

• Минусы

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

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

cffi (пример)

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

cffi (пример 2)

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

cffi (пример 2)

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

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

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

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

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

cffi vs ctypes

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

• Дело вкуса

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

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

• C extensions

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

• cffi, ctypes

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

• Cython

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

• SWIG, Cython

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

Вопросы

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

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

Контакты

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

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

[email protected]

www.rambler-co.ru/jobs !