Редактировать: Мой первоначальный ответ был основан на состоянии 2009 года, с Python 2.6 и 3.0 в качестве текущих версий. Теперь, с Python 2.7 и 3.3, есть другие варианты. В частности, теперь вполне возможно использовать единую базу кода для Python 2 и Python 3.
См. Портирование кода Python 2 на Python 3
Оригинальный ответ:
Официальная рекомендация гласит:
Для портирования существующих Python 2.5 или 2.6
Исходный код на Python 3.0, лучший
Стратегия заключается в следующем:
(Обязательное условие :) Начните с превосходного тестового покрытия.
Порт для Python 2.6. Это должно быть не больше работы, чем средний порт
из Python 2.x в Python 2. (x + 1).
Убедитесь, что все ваши тесты пройдены.
(по-прежнему используется 2.6 :) Включите ключ командной строки -3. Это позволяет
предупреждения об особенностях, которые будут
удален (или изменен) в 3.0. Запустить свой
снова протестируйте набор и исправьте код, который
вы получаете предупреждения о том, пока есть
предупреждений не осталось, и все ваши тесты
еще пройти.
Запустите переводчик исходного кода 2to3 через дерево исходного кода.
(См. 2to3 - автоматический Python 2 до 3
перевод кода для получения дополнительной информации об этом
инструмент.) Запустите результат
перевод под Python 3.0. Вручную
исправить все оставшиеся проблемы, исправить
проблемы, пока все тесты не пройдут снова.
Не рекомендуется пытаться писать
исходный код, который работает без изменений в
оба Python 2.6 и 3.0; ты должен
использовать очень искаженный стиль кодирования,
например избегая печатных заявлений,
метаклассы и многое другое. Если ты
поддержание библиотеки, которая должна
поддерживать как Python 2.6, так и Python
3.0, лучший подход заключается в изменении шага 3 выше, отредактировав 2.6
версия исходного кода и работает
переводчик 2to3 снова, а не
редактирование версии 3.0 исходного кода
Код.
В идеале вы должны получить одну версию, совместимую с 2.6, которую можно перевести на 3.0 с помощью 2to3. На практике вы не сможете достичь этой цели полностью. Так что вам может потребоваться некоторые ручные модификации, чтобы заставить его работать под 3.0.
Я хотел бы сохранить эти модификации в ветке, как ваш вариант 2. Однако вместо того, чтобы поддерживать окончательную версию 3.0-совместимую в этой ветке, я хотел бы применить ручные модификации до переводов 2to3 и поместите этот модифицированный код 2.6 в вашу ветку. Преимущество этого метода состоит в том, что разница между этой ветвью и магистралью 2.6 будет довольно небольшой и будет состоять только из изменений вручную, а не изменений, сделанных 2to3. Таким образом, отдельные ветви будут проще поддерживать и объединять, и вы сможете извлечь выгоду из будущих улучшений в 2to3.
В качестве альтернативы, возьмите немного подхода "подожди и посмотри". Перейдите к портированию только настолько, насколько вы можете использовать одну версию 2.6 плюс перевод 2to3, и откладывайте оставшиеся изменения вручную до тех пор, пока вам действительно не понадобится версия 3.0. Может быть, к этому времени вам больше не нужны ручные настройки ...