#python #django #python-3.x #django-south
#python #django #python-3.x #django-south
Вопрос:
Я только что установил South 1.0, и когда я собирался выполнить свою первую миграцию, я получил это сообщение об ошибке:
... /lib/python3.4/site-packages/south/migration/migrators.py", line 186, in _run_migration
for name, db in south.db.dbs.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
Я исправил это, заменив два вхождения iteritems() на items().
Мои вопросы:
- Если South 1.0 совместим с Python3, почему это происходит?
- Мое исправление вызовет у меня какие-либо проблемы?
Я поражен тем фактом, что я не смог найти никого, кто испытывал бы ту же проблему.
Ответ №1:
27 октября 2014 года было выпущено обновление: South 1.0.1, включающее исправление этой проблемы:
South 1.0.1
Это небольшая версия South с исправлением ошибок с двумя изменениями:
- Исправлена совместимость с Python 3 (она была нарушена в 1.0 случайным введением
iteritems()
)- South явно выдаст ошибку, если обнаружит Django 1.7 или выше, а не сбой с загадочными ошибками.
Мой первоначальный ответ следует ниже.
Похоже, что Django-South на самом деле не поддерживает Python 3, по крайней мере, проект не проверяет поддержку перед выпуском. Смотрите эту проблему в South tracker:
Был ли какой-либо прогресс с поддержкой Python3? Каков текущий статус?
Я вижу связанную с python3 фиксацию перед выпуском 0.8.3, задаваясь вопросом, завершена ли она или нет.
Это должно вроде работать, но если вы хотите постоянную поддержку Python 3, тогда вам лучше использовать миграции django 1.7, которые являются преемниками South и имеют полный набор тестов python 3.
Очевидно, что «sorta» — это «не совсем»; сопровождающий переключил внимание на новую инфраструктуру миграции Django 1.7.
0.8.4 была совместима, но этот коммит снова нарушил совместимость; вашего изменения должно быть достаточно, чтобы устранить эту проблему. Существует запрос на извлечение, который адресует именно это, но он еще не был объединен.
Поскольку 1.0 была выпущена только вчера, причина, по которой вы не нашли никого другого с проблемой, заключается в том, что не так много людей еще сталкивались с ней.
Поддержка миграции Django 1.7 — это в основном интеграция South в магистраль, и она полностью поддерживает Python 3 (для полного дерева Django выполняются автоматические тесты, учитывающие регрессии, подобные этим). Первый релиз-кандидат отсутствует (см.https://www.djangoproject.com/download / для получения инструкций о том, как его установить).
Комментарии:
1. Вау, отличный ответ, большое вам спасибо. Я даже не знал, что South 1.0 был выпущен вчера! (СМЕЕТСЯ). Приятно видеть, что у нас будет поддержка миграции базы данных, интегрированная в Django, это было самое время =).
2. Это удручает. Я ожидал, что разработчики South будут на вершине своей игры. Насколько сложно запускать unittests с
python3.2
? В любом случае, они не должны рекламировать его как поддерживающий Python3, если он не поддерживает Python3…3. Тем временем установите South с
pip install https://bitbucket.org/andrewgodwin/south/get/e2c9102ee033.zip#egg=South
, чтобы получить рабочую версию.4. @DanielJonsson: и, наконец , выпущен релиз.