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

Миграция на Python 3

Миграция на Python 3

Павел Зиновкин (Mail.Ru Group)
Python 3 обещает много нового. Стоит ли мигрировать уже работающие на второй версии приложения? И какие подводные камни ожидают на этом пути? Я расскажу об этом на примере postmaster.mail.ru.

Moscow Python Meetup
PRO

December 21, 2012
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Миграция на Python 3
    Зиновкин Павел
    Thursday, December 20, 12

    View Slide

  2. Кто я?
    Thursday, December 20, 12

    View Slide

  3. Я руковожу python-разработкой
    в Почте Mail.ru
    Thursday, December 20, 12

    View Slide

  4. Python в Почте, это...
    • calendar.mail.ru
    • postmaster.mail.ru
    • различные скрипты
    • .mail.ru
    Thursday, December 20, 12

    View Slide

  5. Python - отличный инструмент для нас.
    Мы используем версию 2.7.3
    Thursday, December 20, 12

    View Slide

  6. Python 2.7 is intended to be the last major
    release in the 2.x series.
    Thursday, December 20, 12

    View Slide

  7. 29-го сентября был релиз Python 3.3
    Thursday, December 20, 12

    View Slide

  8. Python 3
    • GIL стал лучше
    • Все строки теперь unicode
    • print теперь функция
    • Улучшения в стандартной библиотеке
    Thursday, December 20, 12

    View Slide

  9. PEP-393
    Cтроки потребляют меньше памяти
    (в 2-4 раза меньше)
    Thursday, December 20, 12

    View Slide

  10. Часть из этого уже доступно в 2.6, 2.7
    docs.python.org/3/whatsnew/index.html
    Thursday, December 20, 12

    View Slide

  11. На pypi более 1400 пакетов для Python 3
    Thursday, December 20, 12

    View Slide

  12. Даже Django 1.5 будет поддерживать
    Python 3
    (“экспериментально”)
    Thursday, December 20, 12

    View Slide

  13. We're like a bunch of penguins crowded at the edge of
    the ice waiting to see if the first few to dive in get eaten
    by a sea lion or not.
    ... I have to choose the productivity of full library support
    over engineering joy.
    news.ycombinator.com/item?id=2543087
    Thursday, December 20, 12

    View Slide

  14. Возможно, все не так плохо.
    Проверим на чем-то простом.
    Thursday, December 20, 12

    View Slide

  15. Thursday, December 20, 12

    View Slide

  16. postmaster.mail.ru
    • mysql
    • tarantool
    • memcached
    • rabbitmq
    Thursday, December 20, 12

    View Slide

  17. postmaster.mail.ru
    tarantool Django pylibmc celery requests
    MySQL-python raven django-celery
    Thursday, December 20, 12

    View Slide

  18. Как портировать?
    Thursday, December 20, 12

    View Slide

  19. Для начала надо понять
    как это запускать в бою.
    Thursday, December 20, 12

    View Slide

  20. Мы используем python и uwsgi из rpm
    (deb тоже подойдет)
    Thursday, December 20, 12

    View Slide

  21. Нативные пакеты это здорово:
    • yum install postmaster
    • не надо учить админов
    • pypi не умрет посреди раскладки
    • можем ставить нужный Python
    Thursday, December 20, 12

    View Slide

  22. Библиотеки
    Thursday, December 20, 12

    View Slide

  23. создаем virtualenv (python3.3)
    pip install -r requirements.txt
    Thursday, December 20, 12

    View Slide

  24. DLL-Hell
    Thursday, December 20, 12

    View Slide

  25. mysqldb -> pymysql3 + monkeypatch
    pylibmc -> python3-memcached
    сломан django_nose, kombu
    портирован tarantool
    django-celery не работает с django 1.5!
    Thursday, December 20, 12

    View Slide

  26. Портирование кода предельно просто
    Thursday, December 20, 12

    View Slide

  27. ./manage.py test
    hint: особое внимание строкам и
    преобразованиям unicode utf-8
    Thursday, December 20, 12

    View Slide

  28. Заодно можно порефакторить
    Thursday, December 20, 12

    View Slide

  29. Отломан celery
    Плохие тесты
    Но оно таки заработало!
    Thursday, December 20, 12

    View Slide

  30. Ситуация с библиотеками не позволяет
    использовать Python 3
    Thursday, December 20, 12

    View Slide

  31. Однако переход состоится
    (django 1.5, celery, psycopg2, matplotlib, numpy, ipython)
    Thursday, December 20, 12

    View Slide

  32. И каждый из нас может внести в это
    свой вклад
    docs.python.org/3/howto/pyporting.html
    Thursday, December 20, 12

    View Slide

  33. Вопросы?
    Thursday, December 20, 12

    View Slide