Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Кто я? Thursday, December 20, 12

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Thursday, December 20, 12

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

DLL-Hell Thursday, December 20, 12

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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