Форум сайта python.su
Привет всем.
Вчера напоролся на очень прикольный глюк. Я использую WTForms с полем для даты, использующим dateutils.
Так вот вчера обновил виртуальное окружение и появился глюк: при сохранении поля в dateutils вылезала ошибка, говорящая о том, что некий объект совсем не итерируемый. Т.е. абсолютно. Я полез в код и напоролся на то, что используется __next__ вместо next.
Сначала я растерялся и попробовал создать next (вдруг автор был пьян?), но появился ещё глюк, дальше по коду. Я решил, что это какой-то бред и полез в доку. А там ясно и чётко написано, что начиная с версии 2.0, dateutils портирован на третью ветку питона и если вы всё ещё на второй, то пользуйте старые версии.
Удалив его и написав “python-dateutils<2” в зависимостях, проблема была решена.
Так вот к чему я… Синтаксически, код полностью был полностью валиден для “двойки” и это не хорошо.
В таких случаях, как мне кажется, надо в начале модуля делать проверку версии с соответствующим эксцепшеном.
Или, может, есть способ собрать один пакет и для “двойки” и для “тройки”, но так, чтобы установилась нужная часть? Я думаю, что setuptools должен это как-то уметь…
Офлайн
Как-то умеет.
use_2to3=True
Но если автор не захотел — никто его не заставит. Плюс есть нюансы.
Офлайн
Ну и само собой я просто обязан спросить о нюансах!.. :-)
Хотя бы в двух словах.
Офлайн
use_2to3 указывается параметром функции setup. При этом фиксеры кода для тройки берутся из lib2to3.fixers. Также можно добавлять свои фиксеры параметром use_2to3_fixers. Там еще есть какие-то параметры с доктестами, но это уже в доке надешь.
Отредактировано (Апрель 19, 2011 19:33:15)
Офлайн
Статьи, написанные в последнее время на эту тему
http://docs.python.org/py3k/howto/pyporting.html - в первую очередь
http://lucumr.pocoo.org/2010/2/11/porting-to-python-3-a-guide/
http://techspot.zzzeek.org/2011/01/24/zzzeek-s-guide-to-python-3-porting/
http://diveintopython3.org/porting-code-to-python-3-with-2to3.html -
длинная простыня
http://wiki.python.org/moin/PortingPythonToPy3k
Офлайн
Спасибо, почитаю.
Офлайн