Михаил Коробов: Как перейти на python 3

27
Как перейти на Python 3 PyCon Russia 2013, Михаил Коробов

Upload: it-people

Post on 15-Jun-2015

1.241 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Михаил Коробов: Как перейти на Python 3

Как перейти на Python 3

PyCon Russia 2013,Михаил Коробов

Page 2: Михаил Коробов: Как перейти на Python 3

Минутка саморекламы

● 20 своих open-source библиотек, которые поддерживают 2.х и 3.х;

● добавил поддержку Python 3 в несколько небольших сторонних open-source библиотек;

● по гранту PSF добавил поддержку Python 3 в NLTK (https://github.com/nltk/nltk)

Page 3: Михаил Коробов: Как перейти на Python 3

Зачем переходить?

Python 2.x не улучшается уже почти 3 года.

Page 4: Михаил Коробов: Как перейти на Python 3

В чем проблема-то?

● Переводить код с 2.х на 3.х достаточно несложно;

● можно начинать новые проекты на 3.х;● есть утилиты 2to3, python-modernize и

другие;● обновление программ - привычное дело.

Page 5: Михаил Коробов: Как перейти на Python 3

"Проблема": > 20 тыс. библиотек

... всем бы такие проблемы.

Page 6: Михаил Коробов: Как перейти на Python 3

Выход: научиться портировать библиотеки

Page 7: Михаил Коробов: Как перейти на Python 3

Что значит "портировать библиотеку"?

Page 8: Михаил Коробов: Как перейти на Python 3

Какие версии Python поддерживать?

Page 9: Михаил Коробов: Как перейти на Python 3

Какие версии Python поддерживать?

● 2.6● 2.7● 3.2● 3.3+

Page 10: Михаил Коробов: Как перейти на Python 3

tox.ini

[tox]envlist = py26,py27,py32,py33,pypy

[testenv]deps = pytestcommands= py.test []

Page 11: Михаил Коробов: Как перейти на Python 3

Стратегии поддержки Python 3

1. Две версии кода;2. генерация кода для 3.x с помощью 2to3;3. исходный код, работающий под 2.х и 3.х;4. Cython.

Page 12: Михаил Коробов: Как перейти на Python 3

Генерация кода под 3.х

● Официально рекомендованный способ;● утилита/библиотека 2to3.

Примеры:● numpy;● scipy;● tornado;● jinja2;● SQLAlchemy.

Page 13: Михаил Коробов: Как перейти на Python 3

Генерация кода под 3.х

● Официально рекомендованный способ;● утилита/библиотека 2to3.

Примеры:● numpy;● scipy;● tornado;● jinja2;● SQLAlchemy (?).

Page 14: Михаил Коробов: Как перейти на Python 3

Один исходный код

● Оказалось, что это возможно и практично;● __future__ импорты очень помогают;● библиотеки six и python-modernize.

Примеры:● pip, virtualenv;● django;● pyramid;● requests

Page 15: Михаил Коробов: Как перейти на Python 3

Cython

Подходит для C/C++ - расширений.

Примеры:● lxml;● pyzmq

Page 16: Михаил Коробов: Как перейти на Python 3

Практические руководства

● http://docs.python.org/dev/howto/pyporting.html● http://python3porting.com/● https://docs.djangoproject.com/en/dev//topics/python3/● http://packages.python.org/six/

Page 17: Михаил Коробов: Как перейти на Python 3

План действий(один из возможных)

Page 18: Михаил Коробов: Как перейти на Python 3

1. Тесты

● Тесты должны быть;● они должны работать;● их должно быть достаточно.

Page 19: Михаил Коробов: Как перейти на Python 3

2. Python 2.5 - не поддерживать

● __future__ - импорты;● except Exception as e;● b'foo';● io;● и т.д.

Page 20: Михаил Коробов: Как перейти на Python 3

3. "Осовременить" код под 2.хfrom __future__ import absolute_importfrom __future__ import unicode_literalsfrom __future__ import print_functionfrom __future__ import division

except Exception as e:

Page 21: Михаил Коробов: Как перейти на Python 3

4. Ввод-вывод

● Разобраться, как в библиотеке организован ввод-вывод;

● для текстовых данных - "внутри" работать с unicode;

● кодировать-декодировать данные только при общении с "внешним миром".

Page 22: Михаил Коробов: Как перейти на Python 3

5. Добавить поддержку Python 3

● В tox.ini добавтить Python 3;● если тесты падают, исправлять это.

Page 23: Михаил Коробов: Как перейти на Python 3

5. Добавить поддержку Python 3

Если выполнены пункты 1-4, то тесты уже должны "почти" работать.

Page 24: Михаил Коробов: Как перейти на Python 3
Page 25: Михаил Коробов: Как перейти на Python 3
Page 26: Михаил Коробов: Как перейти на Python 3
Page 27: Михаил Коробов: Как перейти на Python 3

Спасибо.