Михаил Коробов: Как перейти на python 3
TRANSCRIPT
![Page 1: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/1.jpg)
Как перейти на Python 3
PyCon Russia 2013,Михаил Коробов
![Page 2: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/2.jpg)
Минутка саморекламы
● 20 своих open-source библиотек, которые поддерживают 2.х и 3.х;
● добавил поддержку Python 3 в несколько небольших сторонних open-source библиотек;
● по гранту PSF добавил поддержку Python 3 в NLTK (https://github.com/nltk/nltk)
![Page 3: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/3.jpg)
Зачем переходить?
Python 2.x не улучшается уже почти 3 года.
![Page 4: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/4.jpg)
В чем проблема-то?
● Переводить код с 2.х на 3.х достаточно несложно;
● можно начинать новые проекты на 3.х;● есть утилиты 2to3, python-modernize и
другие;● обновление программ - привычное дело.
![Page 5: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/5.jpg)
"Проблема": > 20 тыс. библиотек
... всем бы такие проблемы.
![Page 6: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/6.jpg)
Выход: научиться портировать библиотеки
![Page 7: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/7.jpg)
Что значит "портировать библиотеку"?
![Page 8: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/8.jpg)
Какие версии Python поддерживать?
![Page 9: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/9.jpg)
Какие версии Python поддерживать?
● 2.6● 2.7● 3.2● 3.3+
![Page 10: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/10.jpg)
tox.ini
[tox]envlist = py26,py27,py32,py33,pypy
[testenv]deps = pytestcommands= py.test []
![Page 11: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/11.jpg)
Стратегии поддержки Python 3
1. Две версии кода;2. генерация кода для 3.x с помощью 2to3;3. исходный код, работающий под 2.х и 3.х;4. Cython.
![Page 12: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/12.jpg)
Генерация кода под 3.х
● Официально рекомендованный способ;● утилита/библиотека 2to3.
Примеры:● numpy;● scipy;● tornado;● jinja2;● SQLAlchemy.
![Page 13: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/13.jpg)
Генерация кода под 3.х
● Официально рекомендованный способ;● утилита/библиотека 2to3.
Примеры:● numpy;● scipy;● tornado;● jinja2;● SQLAlchemy (?).
![Page 14: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/14.jpg)
Один исходный код
● Оказалось, что это возможно и практично;● __future__ импорты очень помогают;● библиотеки six и python-modernize.
Примеры:● pip, virtualenv;● django;● pyramid;● requests
![Page 15: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/15.jpg)
Cython
Подходит для C/C++ - расширений.
Примеры:● lxml;● pyzmq
![Page 16: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/16.jpg)
Практические руководства
● 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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/17.jpg)
План действий(один из возможных)
![Page 18: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/18.jpg)
1. Тесты
● Тесты должны быть;● они должны работать;● их должно быть достаточно.
![Page 19: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/19.jpg)
2. Python 2.5 - не поддерживать
● __future__ - импорты;● except Exception as e;● b'foo';● io;● и т.д.
![Page 20: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/21.jpg)
4. Ввод-вывод
● Разобраться, как в библиотеке организован ввод-вывод;
● для текстовых данных - "внутри" работать с unicode;
● кодировать-декодировать данные только при общении с "внешним миром".
![Page 22: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/22.jpg)
5. Добавить поддержку Python 3
● В tox.ini добавтить Python 3;● если тесты падают, исправлять это.
![Page 23: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/23.jpg)
5. Добавить поддержку Python 3
Если выполнены пункты 1-4, то тесты уже должны "почти" работать.
![Page 24: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/24.jpg)
![Page 25: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/25.jpg)
![Page 26: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/26.jpg)
![Page 27: Михаил Коробов: Как перейти на Python 3](https://reader035.vdocuments.mx/reader035/viewer/2022081801/557ebb79d8b42a1e438b5397/html5/thumbnails/27.jpg)
Спасибо.