Подключение внешних библиотек в python
TRANSCRIPT
![Page 1: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/1.jpg)
Скрещиваем ежа с ужом или как подружить питон
и…Шаламов Максим
ведущий Python-разработчик в Rambler&Co
![Page 2: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/2.jpg)
![Page 3: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/3.jpg)
40 50+ 500+ 1500 млн человек
суммарная аудитория группы количество изданий, сервисов и проектов
разработчиков человек в хорошей компании
![Page 4: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/4.jpg)
Livejournal
Gazeta.ru
Begun Price Ferra
Redigo
Letidor
Канобу
Видео
Секрет фирмы
Рамблер Инфографика
Новости Почта
Финансы Недвижимость
Погода Гороскопы
Субботний Рамблер Путешествия
Касса Еда
Город
Воздух
Волна Рестораны
Мослента
Lenta.ru
Афиша
Motor
Championat Quto
Рамблер
Видеостудия
![Page 5: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/5.jpg)
Языки и технологии
![Page 6: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/6.jpg)
Контакты
В группе компаний Rambler&Co всегда есть открытые вакансии для тех, кто хочет профессионально расти и развиваться,
занимаясь тем, что по-настоящему нравится
www.rambler-co.ru/jobs !
![Page 7: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/7.jpg)
Python отличный язык
• Много синтаксического сахара
• Много батареек
• Большое сообщество
![Page 8: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/8.jpg)
Что обычно относят к недостаткам
• Медленный
• Нет реальной многопоточности
![Page 9: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/9.jpg)
О чем пойдет речь?• Как решить указанные проблемы с использованием языка С
• Cython
• C extension
• SWIG
• FFI
• ctypes
• cffi
![Page 10: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/10.jpg)
Но использовать С так сложно…
![Page 11: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/11.jpg)
Зачем нам подключать внешние библиотеки
• Увеличение скорости работы алгоритмов
• Реальная многопоточность
• Использование уже существующего функционала, написанного на C
![Page 12: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/12.jpg)
CPython native C extensions
• Относительно сложно и долго
• Тема для отдельного доклада
• Пример: https://goo.gl/lq3NZS
• Пример: http://goo.gl/wfpn2V
![Page 13: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/13.jpg)
Что такое Cython?• Язык программирования, упрощающий написание модулей С/С++ кода для Python.
• Код Cython преобразуется в С/С++ код для последующей компиляции.
• Поддерживает прямой вызов функций и методов С/С++ из кода на Cython и строгую типизацию переменных, классов, атрибутов классов.
• Имеет очень близкий синтаксис к Python.
![Page 14: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/14.jpg)
Как это работает?• Пишем код в файле с расширением pyx
• В setup.py файле указываем параметры компиляции
• Компилируем: python setup.py build_ext —inplace
• Импортируем полученный результат как обычный модуль
![Page 15: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/15.jpg)
Пример (файл fib.pyx)
![Page 16: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/16.jpg)
Пример (setup.py)
![Page 17: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/17.jpg)
Минусы
• Пока есть несовместимости с CPython, которые планируют устранить к версии 1.0
• Это новый язык
![Page 18: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/18.jpg)
Полезные ссылки
• Работа с numpy (http://goo.gl/P42HyT)
• Перевод документации v0.15 (http://goo.gl/a76BvY)
![Page 19: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/19.jpg)
SWIG
• Создает часть оберток на С/C++, часть на Python
• Есть особенности под разные платформы
![Page 20: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/20.jpg)
SWIG (общий подход)
• Нам нужен файл с кодом *.c
• Создаем интерфейсный файл *.i, в котором описываем подключенный файл и функции
• Выполняем команды компиляции
• Импортируем полученный модуль в код на Python
![Page 21: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/21.jpg)
Полезные ссылки
• Пример на русском: http://goo.gl/yCX6EO
• Документация: http://goo.gl/rNQxtQ
![Page 22: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/22.jpg)
FFI - Foreign Function Interface
• интерфейс вызова внешних функций
• позволяет программам, написанным на одном языке вызывать программы написанные на другом языке
![Page 23: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/23.jpg)
Плюсы ffi
• ffi расширения можно компилировать или подключать в runtime
• ffi расширения мультиплатформенные
• ffi расширения просты для понимания и написания
![Page 24: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/24.jpg)
libffi
• Она обеспечивает интерфейс на языке С для вызова функций во время выполнения, а не во время компиляции
• Может указывать на функцию, которая обрабатывает любое количество аргументов определенных в runtime
![Page 25: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/25.jpg)
ffi в python
• ctypes
• cffi
![Page 26: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/26.jpg)
ctypes• это C-расширение, ссылающееся на libffi и Python код для связки с ней
• позволяет вызвать внешние C-функции из Python кода
• может использоваться для написания оберток над внешними библиотеками
• часть стандартной библиотеки Python
• Минусы:
• сложный api
![Page 27: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/27.jpg)
ctypes пример
• Опустим реализацию функции merge
![Page 28: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/28.jpg)
ctypes пример
![Page 29: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/29.jpg)
Полезные ссылки
• Документация: https://goo.gl/FBfdrK
• Пример на русском: http://goo.gl/bv7BTt
• Пример с opencv: https://goo.gl/cpzLMt
![Page 30: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/30.jpg)
cffi• Нужны знания только языков C и Python
• Основная логика пишется на Python, на C пишется только то, что необходимо
• Позволяет избежать излишних C-объявлений, сам находит объявление функций и переменных
• Работа с С-библиотекой, как с Python библиотекой
• Минусы
• Не входит в стандартную библиотеку Python
![Page 31: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/31.jpg)
cffi (пример)
![Page 32: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/32.jpg)
cffi (пример 2)
![Page 33: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/33.jpg)
cffi (пример 2)
![Page 34: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/34.jpg)
Полезные ссылки
• Документация: http://goo.gl/K15xMS
• Пример: https://goo.gl/DYOjc2
![Page 35: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/35.jpg)
cffi vs ctypes
• Делают одно и тоже
• Дело вкуса
![Page 36: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/36.jpg)
Личное мнение• Самый сложный и мощный инструмент:
• C extensions
• Самый простой и удобный инструмент:
• cffi, ctypes
• Самый простой способ ускорить алгоритм:
• Cython
• Самой простой способ подключать C++ библиотеки:
• SWIG, Cython
![Page 37: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/37.jpg)
Вопросы
Спасибо за внимание
![Page 38: Подключение внешних библиотек в python](https://reader031.vdocuments.site/reader031/viewer/2022012404/58a835ad1a28abbe408b709b/html5/thumbnails/38.jpg)
Контакты
В группе компаний Rambler&Co всегда есть открытые вакансии для тех, кто хочет профессионально расти и развиваться,
занимаясь тем, что по-настоящему нравится
www.rambler-co.ru/jobs !