SlideShare a Scribd company logo
1 of 23
Download to read offline
ПОРТИРУЕМ НА PYTHON 3
Nikita Grishko
Wargaming.net
ЗАЧЕМ НАМ PYTHON 3?
ЗАЧЕМ НАМ PYTHON 3?
летом 2010 последний релиз ветки 2.х с новыми фичами
в 2.х только исправления ошибок
улучшения в стандартную библиотеку не вносятся
ЗАЧЕМ НАМ PYTHON 3?
Asynchronous IO Support (PEP-3156)
yield from (PEP-0380)
Function Annotations (PEP-3107)
...
ЧТО ДЕЛАТЬ С
СУЩЕСТВУЮЩИМ КОДОМ?
Нельзя все сразу переписать с 2.x на 3.x, т.к. большинство
кода пишется на 2.х
С ЧЕГО НАЧАТЬ?
С ЧЕГО НАЧАТЬ?
1. Нужны тесты!
С ЧЕГО НАЧАТЬ?
1. Нужны тесты!
2. Много хороших тестов!
С ЧЕГО НАЧАТЬ?
1. Нужны тесты!
2. Много хороших тестов!
3. Поддерживать версии: py26, py27, py32+, pypy?
2TO3
официально рекомендованный способ (PEP-3000)
входит в стандартную поставку
автоматические генерирует 3.х код, что довольно удобно
2TO3 МИНУСЫ
работает не всегда корректно
2TO3 МИНУСЫ
@@ -314,7 +314,7 @@
tags.append((k, v))
data['tags'] = tags
+

for k in data.keys():
for k in list(data.keys()):
if k in RESERVED_FIELDS:
continue
2TO3 МИНУСЫ
@@ -147,7 +147,7 @@
if worker not in default_servers:
raise CommandError(
'Unsupported udp server type; expected one of %s, but got "%s".'
% (', '.join(default_servers.keys()), worker))
+
% (', '.join(list(default_servers.keys())), worker))
return default_servers[worker]
2TO3 МИНУСЫ
@@ -75,7 +75,7 @@

+

# Ensure values are unique, do not contain already present values, and
# values specified in select_related
values = set(filter(None, (getattr(o, column) for o in objects)))
values = set([_f for _f in (getattr(o, column) for o in objects) if _f])
if values:
qs = model.objects
if database:
2TO3 МИНУСЫ
работает не всегда корректно
две ветки
2+3
Mожно писать код который будет одновременно работать
как на 2.x так и на 3.х.
Примеры: django, virtualenv, requests, ... .
2+3 ПОМОЩНИКИ
2+3 ПОМОЩНИКИ
tox (http://tox.readthedocs.org/)
2+3 ПОМОЩНИКИ
tox (http://tox.readthedocs.org/)
__future__ импорты
(http://docs.python.org/2/library/__future__.html)
2+3 ПОМОЩНИКИ
tox (http://tox.readthedocs.org/)
__future__ импорты
(http://docs.python.org/2/library/__future__.html)
six (http://pythonhosted.org/six/)
ЧТО ДАЛЬШЕ?
pull requests
issues
ЕЩЕ ИНТЕРЕСНОЕ
http://www.slideshare.net/it-people/ekbpy2012-python-3
http://www.slideshare.net/it-people/python-3-16964834
ВОПРОСЫ?

NIKITA GRISHKO / HTTPS://GITHUB.COM/GR1N

More Related Content

More from Python Meetup

S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
Python Meetup
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
Python Meetup
 

More from Python Meetup (20)

Python&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.byPython&Printer / Андрей Пучко / penta.by
Python&Printer / Андрей Пучко / penta.by
 
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
 
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
 
Про асинхронность / Максим Щепелин / Web Developer Wargaming
Про асинхронность / Максим Щепелин / Web Developer WargamingПро асинхронность / Максим Щепелин / Web Developer Wargaming
Про асинхронность / Максим Щепелин / Web Developer Wargaming
 
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
Wargaming: тыл - фронту!
Wargaming: тыл - фронту!Wargaming: тыл - фронту!
Wargaming: тыл - фронту!
 
Язык программирования GO
Язык программирования GOЯзык программирования GO
Язык программирования GO
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
 
Redis. Как мы боролись со сложностью
Redis. Как мы боролись со сложностьюRedis. Как мы боролись со сложностью
Redis. Как мы боролись со сложностью
 
Обзор фреймворка Twisted
Обзор фреймворка TwistedОбзор фреймворка Twisted
Обзор фреймворка Twisted
 
Обзор способов написания конкурентных программ в питоне
Обзор способов написания конкурентных программ в питоне Обзор способов написания конкурентных программ в питоне
Обзор способов написания конкурентных программ в питоне
 
Pebble
PebblePebble
Pebble
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгирование
 
Python для анализа данных
Python для анализа данныхPython для анализа данных
Python для анализа данных
 
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
 
Использование gevent для эмуляции высокой нагрузки
Использование gevent для эмуляции высокой нагрузкиИспользование gevent для эмуляции высокой нагрузки
Использование gevent для эмуляции высокой нагрузки
 
Введение в GIL и новый GIL
Введение в GIL и новый GILВведение в GIL и новый GIL
Введение в GIL и новый GIL
 
Garbage collector and a bit of memory management
Garbage collector and a bit of memory managementGarbage collector and a bit of memory management
Garbage collector and a bit of memory management
 

Портируем на Python 3