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

764 views

Published on

Почему стоит все чаще задумывать о поддержке Python 3 и с какими проблемами можно столкнуться при портировании. Рассмотрим на примерах из Sentry (https://github.com/getsentry/sentry) как добавить поддержку Python 3 с использованием 2to3 (http://docs.python.org/3.3/library/2to3.html), tox (http://tox.readthedocs.org/en/latest/) и six (http://pythonhosted.org/six/).

Автор: Никита Гришко (Wargaming.net)

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
764
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. ПОРТИРУЕМ НА PYTHON 3 Nikita Grishko Wargaming.net
  2. 2. ЗАЧЕМ НАМ PYTHON 3?
  3. 3. ЗАЧЕМ НАМ PYTHON 3? летом 2010 последний релиз ветки 2.х с новыми фичами в 2.х только исправления ошибок улучшения в стандартную библиотеку не вносятся
  4. 4. ЗАЧЕМ НАМ PYTHON 3? Asynchronous IO Support (PEP-3156) yield from (PEP-0380) Function Annotations (PEP-3107) ...
  5. 5. ЧТО ДЕЛАТЬ С СУЩЕСТВУЮЩИМ КОДОМ? Нельзя все сразу переписать с 2.x на 3.x, т.к. большинство кода пишется на 2.х
  6. 6. С ЧЕГО НАЧАТЬ?
  7. 7. С ЧЕГО НАЧАТЬ? 1. Нужны тесты!
  8. 8. С ЧЕГО НАЧАТЬ? 1. Нужны тесты! 2. Много хороших тестов!
  9. 9. С ЧЕГО НАЧАТЬ? 1. Нужны тесты! 2. Много хороших тестов! 3. Поддерживать версии: py26, py27, py32+, pypy?
  10. 10. 2TO3 официально рекомендованный способ (PEP-3000) входит в стандартную поставку автоматические генерирует 3.х код, что довольно удобно
  11. 11. 2TO3 МИНУСЫ работает не всегда корректно
  12. 12. 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
  13. 13. 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]
  14. 14. 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:
  15. 15. 2TO3 МИНУСЫ работает не всегда корректно две ветки
  16. 16. 2+3 Mожно писать код который будет одновременно работать как на 2.x так и на 3.х. Примеры: django, virtualenv, requests, ... .
  17. 17. 2+3 ПОМОЩНИКИ
  18. 18. 2+3 ПОМОЩНИКИ tox (http://tox.readthedocs.org/)
  19. 19. 2+3 ПОМОЩНИКИ tox (http://tox.readthedocs.org/) __future__ импорты (http://docs.python.org/2/library/__future__.html)
  20. 20. 2+3 ПОМОЩНИКИ tox (http://tox.readthedocs.org/) __future__ импорты (http://docs.python.org/2/library/__future__.html) six (http://pythonhosted.org/six/)
  21. 21. ЧТО ДАЛЬШЕ? pull requests issues
  22. 22. ЕЩЕ ИНТЕРЕСНОЕ http://www.slideshare.net/it-people/ekbpy2012-python-3 http://www.slideshare.net/it-people/python-3-16964834
  23. 23. ВОПРОСЫ? NIKITA GRISHKO / HTTPS://GITHUB.COM/GR1N

×