Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Константин Игнатов (Qrator Labs) - Экосистема Python 3 для тех, кто любит покопаться в данных

Константин Игнатов (Qrator Labs) - Экосистема Python 3 для тех, кто любит покопаться в данных

Доклад с конференции Moscow Python Conf 2016 (http://conf.python.ru)
Видео: https://conf.python.ru/ekosistema-python-3-dlya-teh-kto-lyubit-pokopatsya-v-dannyh/

Я занимаюсь исследованиями в Qrator Labs - компании-распределённой сети фильтрации трафика, через которую проходит огромное количество байт, пакетов и запросов. Всё это мы анализируем в реальном времени, значительную часть храним и изучаем post factum.
Во-первых, я расскажу о роли исследователей в современной IT компании, о том, как исследования становятся частью процесса разработки и как результаты этих исследований превращаются в production-алгоритмы и продукты. В частности, вы узнаете, почему исследователь вообще должен знать разницу между версиями Python, а devops - между разновидностями BLAS.
Во-вторых, поделюсь опытом использования Python3 и его scientific-экосистемы. Расскажу о ключевых проектах этой экосистемы, о планах некоторых мейнтейнеров прекратить поддержку Python2, И представлю наш, полностью собранный из исходников, основанный на Python3.5 образ, содержащий (почти) все популярные научные библиотеки.

Moscow Python Meetup

October 12, 2016
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Экосистема Python 3 для тех, кто любит покопаться в данных

    Константин Игнатов Qrator Labs 12.10.2016 @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 1 / 36
  2. План 1 Исследователи и разработчики Повторяемость и тестирование Распространение и

    воспроизводимость Документирование Границы разумного И всем хорошо 2 Python3 экосистема готова Readiness Jupyter stack Numpy, SciPy, sci-kits Наш эксперимент @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 3 / 36
  3. Исследователи и разработчики Повторяемость и тестирование План 1 Исследователи и

    разработчики Повторяемость и тестирование Распространение и воспроизводимость Документирование Границы разумного И всем хорошо 2 Python3 экосистема готова Readiness Jupyter stack Numpy, SciPy, sci-kits Наш эксперимент @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 4 / 36
  4. Исследователи и разработчики Повторяемость и тестирование Cплошное тестирование Разработчики пишут

    автоматизированные тесты Небольшие программы Позволяют проверить, что всё работает Создают граничные условия пытаются спровоцировать ошибку Должны работать одинаково у создателей и на других компьютерах при запуске в разное время Найденные таким образом ошибки исправляют в коде @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 5 / 36
  5. Исследователи и разработчики Повторяемость и тестирование Исследование это сплошное тестирование

    Чаще всего небольшие программы Позволяют проверить гипотезу Пытаются опровергнуть гипотезу Должны работать одинаково у исследователей и у рецензентов при запуске в разное время Если гипотеза не подтверждается или опровергнута, её формулировка уточняется @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 6 / 36
  6. Исследователи и разработчики Повторяемость и тестирование Nose Самое популярное средство

    автоматизированного тестирования Удобнее, чем стандартный unittest Поддержка Python3 есть Но сам проект не развивается @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 7 / 36
  7. Исследователи и разработчики Повторяемость и тестирование Py.Test Python3 с 2009

    года (Python 3.1) CLI совместим с nosetests assertEquals (a,b) → assert a == b Более читаемые отчёты об ошибках Параметризация тестов без мучений @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 8 / 36
  8. Исследователи и разработчики Распространение и воспроизводимость План 1 Исследователи и

    разработчики Повторяемость и тестирование Распространение и воспроизводимость Документирование Границы разумного И всем хорошо 2 Python3 экосистема готова Readiness Jupyter stack Numpy, SciPy, sci-kits Наш эксперимент @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 9 / 36
  9. Исследователи и разработчики Распространение и воспроизводимость Актуальные данные и средства

    работы с ними Копия production-данных = постоянное воспроизведение результатов исследования Получать можно при помощи множества библиотек, поддерживающих Python3: Mysql, Postgres, Redis, Influxdb, Kafka, Spark... HTTP, AMQP, ∅mq... JSON, msgpack, CBOR, Protobuf... сложнее найти, где поддержки Python3 нет. Отдельно стоит отметить библиотеки с поддержкой asyncio. @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 11 / 36
  10. Исследователи и разработчики Распространение и воспроизводимость А что если setup.py

    появится в каждом исследовательском проекте? Создавать исключительно по шаблону Если нужны сложные вещи, то должны помогать разработчики Разработчики потом могут форкнуть проект Хочешь воспроизвести результаты? Fork Указать чьё-то исследование как зависимость своего проекта отличный способ цитирования @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 12 / 36
  11. Исследователи и разработчики Распространение и воспроизводимость Setuptools, pip, warehouse PIPA,

    естественно, поддерживает Python 3. В стандартной библиотеке: ensurepip pyenv Manylinux wheels: pip install теперь должен просто работать В организации инфрастуктуры исследователям нужна помощь @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 13 / 36
  12. Исследователи и разработчики Документирование План 1 Исследователи и разработчики Повторяемость

    и тестирование Распространение и воспроизводимость Документирование Границы разумного И всем хорошо 2 Python3 экосистема готова Readiness Jupyter stack Numpy, SciPy, sci-kits Наш эксперимент @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 14 / 36
  13. Исследователи и разработчики Границы разумного План 1 Исследователи и разработчики

    Повторяемость и тестирование Распространение и воспроизводимость Документирование Границы разумного И всем хорошо 2 Python3 экосистема готова Readiness Jupyter stack Numpy, SciPy, sci-kits Наш эксперимент @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 17 / 36
  14. Исследователи и разработчики Границы разумного Исследователи создают новое Им очень

    важно не отставать от жизни Интегрировать что-то в старые платформы не их задача Быстрее и лучше всего всегда начинать с нуля Обратной совместимости требовать от них нельзя Наоборот, их наработки формируют будущее @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 18 / 36
  15. Исследователи и разработчики И всем хорошо План 1 Исследователи и

    разработчики Повторяемость и тестирование Распространение и воспроизводимость Документирование Границы разумного И всем хорошо 2 Python3 экосистема готова Readiness Jupyter stack Numpy, SciPy, sci-kits Наш эксперимент @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 19 / 36
  16. Исследователи и разработчики И всем хорошо Несколько шагов навстречу друг

    другу и... Исследователи получают новые возможности Разработчикам проще интегрировать результаты исследований Компании быстрее выпускают новые продукты @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 20 / 36
  17. Python3 экосистема готова Readiness План 1 Исследователи и разработчики Повторяемость

    и тестирование Распространение и воспроизводимость Документирование Границы разумного И всем хорошо 2 Python3 экосистема готова Readiness Jupyter stack Numpy, SciPy, sci-kits Наш эксперимент @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 21 / 36
  18. Python3 экосистема готова Readiness M2Crypto python-ldap diamond INITools python-cdb s3cmd

    tendenci mechanize pathtools python-gflags thrift ansible aspen google-apputils python-cjson newrelic_plugin_agent marionette_client python-openid graphite-web carbon supervisor @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 22 / 36
  19. Python3 экосистема готова Readiness M2Crypto python-ldap diamond INITools python-cdb s3cmd

    tendenci mechanize pathtools python-gflags thrift ansible aspen google-apputils python-cjson newrelic_plugin_agent marionette_client python-openid graphite-web carbon supervisor @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 22 / 36
  20. Python3 экосистема готова Readiness PEP 373 EOL Python 2.7... Было

    2016! Python2.8: PEP 404 Bugfix до 2020 года RHEL или Oracle могут взять на себя @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 23 / 36
  21. Python3 экосистема готова Readiness PEP 373 EOL Python 2.7... Было

    2016! Python2.8: PEP 404 Bugfix до 2020 года RHEL или Oracle могут взять на себя @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 23 / 36
  22. Python3 экосистема готова Jupyter stack План 1 Исследователи и разработчики

    Повторяемость и тестирование Распространение и воспроизводимость Документирование Границы разумного И всем хорошо 2 Python3 экосистема готова Readiness Jupyter stack Numpy, SciPy, sci-kits Наш эксперимент @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 24 / 36
  23. Python3 экосистема готова Numpy, SciPy, sci-kits План 1 Исследователи и

    разработчики Повторяемость и тестирование Распространение и воспроизводимость Документирование Границы разумного И всем хорошо 2 Python3 экосистема готова Readiness Jupyter stack Numpy, SciPy, sci-kits Наш эксперимент @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 26 / 36
  24. Python3 экосистема готова Наш эксперимент План 1 Исследователи и разработчики

    Повторяемость и тестирование Распространение и воспроизводимость Документирование Границы разумного И всем хорошо 2 Python3 экосистема готова Readiness Jupyter stack Numpy, SciPy, sci-kits Наш эксперимент @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 31 / 36
  25. Python3 экосистема готова Наш эксперимент docker run qrator/python35_sci Python 3.5.2

    Собрано из исходников (на основе Gentoo Hardened # pip freeze | wc -l 242 есть несколько сборок под конкретные процессоры: qrator / python35_sci : haswell -0 qrator / python35_sci : broadwell -0 qrator / python35_sci : westmere -0 qrator / python35_sci : ivybridge -0 qrator / python35_sci : core2 -0 qrator / python35_sci : bdver2 -0 @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 32 / 36
  26. Самое важное It’s time for me to stop, for us

    to go python3 Сам Python 2 ещё будет какое-то время жить Бэкпорты новых модулей постепенно появляются Жить в Python 2 становится всё больнее Последней каплей станет появление стабильного JIT Python 3 Когда это произойдёт, лучше чтобы production-код был нативно-Python 3 Исследовательский код, написанный сегодня на Python 3, в этом поможет @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 33 / 36
  27. Запасные слайды А как же...? Про скорость... Чаще всего имеет

    значение только асимптотическая сложность 2to3 может вставить лишний проход по массиву Всё тяжёлое стоит сделать на C Хотелось бы видеть PyPy или PyStone с поддержкой Python3 Microsoft Pyjion? Проблемы с произвоительностью Python3 будут разрешены, c python2 нет @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 35 / 36
  28. Запасные слайды А как же...? Почему нет tensorflow? Я не

    смог собрать его совсем из исходников Чтобы собрать tensorflow, нужно собрать Bazel Bazel это проект от Google, обеспечивающий повторяемость сборки Bazel написан на Java, а в репозитории лежат бинарные файлы сторонних проектов (Малую) часть из этих проектов я собрал, но застрял на gRPC-java Чтобы собрать gRPC-java нужен gradle Чтобы собрать gradle нужен gradle, сборка через ant не поддерживается уже лет 8. В образе есть pip, так что можно просто установить через него @podshumok (Qrator Labs) Python 3 for Data Scientist conf.python.ru 2016 36 / 36