Разработка Python 3 и проблемы распределения

Объект DateTime не имеет формата.

Таким образом, ваш код здесь бесполезен:

var format = DateTime.UtcNow.ToString("G");
var dateTime = DateTime.Parse(format);

Это полностью эквивалентно

var dateTime = DateTime.UtcNow;

В вашем модульном тесте вы должны сравнить либо DateTime с [116 ] или string с string. В настоящее время вы сравниваете DateTime с string.

Таким образом, вы должны изменить свой код на:

Assert.That(sut.ToString("G"), Is.EqualTo("16/01/2019 15:30:00"));

или

Assert.That(sut, Is.EqualTo(DateTime.Parse("16/01/2019 15:30:00")));
8
задан Greg Hewgill 18 January 2009 в 19:01
поделиться

5 ответов

Править: мой исходный ответ был основан на состоянии 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 лучшая стратегия следующая:

  1. (Предпосылка:) Запускаются с превосходного тестового покрытия.

  2. Порт к Python 2.6. Это больше не должно быть работы, чем средний порт от Python 2.x до Python 2. (x+1). Удостоверьтесь вся своя тестовая передача.

  3. (Все еще использование 2.6:) Включают-3 переключателя командной строки. Это включает предупреждения о функциях, которые будут удалены (или изменение) в 3,0. Выполните свой набор тестов снова и исправьте код, что Вы получаете предупреждения, о том, пока нет никаких предупреждений, оставленных, и все Ваши тесты все еще передают.

  4. Работайте 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 версии. Возможно, к этому времени Вам больше не нужны никакие ручные тонкие настройки...

9
ответ дан 5 December 2019 в 12:13
поделиться

Я не думаю, что выбрал бы это путь вообще. Это болезненно, какой бы ни путь Вы смотрите на него. Действительно, если нет сильный коммерческий интерес в хранении обеих версий одновременно, это - больше головной боли, чем усиление.

Я думаю, что имеет больше смысла просто продолжать разрабатывать для 2.x на данный момент, по крайней мере, в течение нескольких месяцев, до года. В какой-то момент вовремя будет пора просто объявить на заключительной, стабильной версии для 2.x и разработать следующие для 3.x +

Например, я не переключусь на 3.x, пока некоторые главные платформы не пойдут тем путем: PyQt, matplotlib, numpy, и некоторые другие. И я действительно не возражаю, если в какой-то момент они останавливаются 2.x, поддерживают и только начинают разрабатывать для 3.x, потому что я буду знать, что в скором времени смогу переключиться на 3.x также.

2
ответ дан 5 December 2019 в 12:13
поделиться

Для разработки опция 3 является слишком громоздкой. Поддержание двух ответвлений является самым легким путем, хотя способ сделать, который будет варьироваться между VCSes. Много DVCS будут более рады отдельным repos (с общей родословной помочь слиянию) и централизовали VCS, будет, вероятно, легче работать с с двумя ответвлениями. Опция 1 возможна, но можно пропустить что-то для слияния и немного больше подверженного ошибкам IMO.

Для распределения я использовал бы опцию 3 также, если это возможно. Все 3 опции допустимы так или иначе, и я видел вариации на эти модели от времен до времен.

2
ответ дан 5 December 2019 в 12:13
поделиться

Я запустил бы путем миграции на 2,6, который является очень близко к python 3.0. Вы могли бы даже хотеть ожидать 2,7, который будет еще ближе к python 3.0.

И затем, после того как Вы мигрировали на 2,6 (или 2.7), я предлагаю, чтобы Вы просто сохранили всего одну версию сценария с вещами как, "если PY3K:... else:..." в редких местах, где это будет обязательно. Конечно, это не вид кода мы, разработчикам нравится писать, но затем Вы не должны волноваться об управлении несколькими сценариями или ответвлениями или патчами или дистрибутивами, которые будут кошмаром.

Независимо от того, что Вы выбираете, удостоверьтесь, что у Вас есть полные тесты с 100%-м покрытием кода.

Удачи!

1
ответ дан 5 December 2019 в 12:13
поделиться

Какой бы ни опция для разработки выбрана, самые потенциальные проблемы могли быть облегчены с полным поблочным тестированием, чтобы гарантировать, чтобы эти две версии произвели соответствие выводу. Тем не менее опция 2 кажется самой естественной для меня: применение изменений от одного исходного дерева до другого исходного дерева является задачей (большинство), системы управления версиями были разработаны для - почему бы не воспользоваться преимуществами инструментов, которые они обеспечивают для упрощения этого.

Для разработки трудно сказать, 'не зная Вашу аудиторию'. Пользователи Python питания, вероятно, ценили бы не необходимость загрузить две копии Вашего программного обеспечения все же для более общей базы пользователей, это должно, вероятно, 'просто работать'.

0
ответ дан 5 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: