python django python-3.x django-south

python - ¿Por qué Django South 1.0 usa iteritems()?



python-3.x django-south (1)

La actualización : South 1.0.1 se lanzó el 27 de octubre de 2014, que incluye la solución para este problema :

Sur 1.0.1

Esta es una pequeña versión de corrección de errores de South con dos cambios:

  • La compatibilidad con Python 3 se ha corregido (se rompió en 1.0 por una introducción accidental de iteritems() )
  • South generará un error explícito si detecta Django 1.7 o superior en lugar de fallar con errores crípticos.

Mi respuesta original sigue a continuación .

Parece que Django-South no es realmente compatible con Python 3, al menos el proyecto no verifica el soporte antes de lanzarlo. Vea este tema en el rastreador del Sur :

¿Ha habido algún progreso con el soporte de Python3? ¿Cuál es el estado actual?

Veo un compromiso relacionado con python3 antes de la versión 0.8.3, preguntándome si está completo o no.

Debería ser una especie de trabajo, pero si quieres un soporte continuo de Python 3, es mejor que utilices las migraciones de django 1.7, que son el sucesor de South y tienen un conjunto completo de pruebas de python 3.

Claramente el ''sorta'' no es ''realmente''; el mantenedor ha cambiado su enfoque hacia la nueva infraestructura de migración de Django 1.7.

0.8.4 era compatible, pero este compromiso rompió la compatibilidad nuevamente; su cambio debería ser suficiente para solucionar ese problema. Hay una solicitud de extracción que aborda solo eso, pero aún no se ha fusionado.

Como la versión 1.0 se lanzó ayer, la razón por la que no ha encontrado a nadie más con el problema es porque todavía no se ha encontrado con mucha gente.

El soporte de migración de Django 1.7 es básicamente una integración de South en la línea principal, y es totalmente compatible con Python 3 (se ejecutan pruebas automatizadas para las regresiones de captura de árbol Django completas como estas). La primera versión candidata está fuera (consulte https://www.djangoproject.com/download/ para obtener instrucciones sobre cómo instalarlo).

Acabo de instalar South 1.0 y cuando estaba a punto de realizar mi primera migración, recibí este mensaje de error:

... /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''

Lo arreglé reemplazando dos apariciones de iteritems () por elementos ().
Mis preguntas son:

  • Si South 1.0 es compatible con Python3, ¿por qué sucede esto?
  • ¿Mi solución me causará algún problema?

Estoy sorprendido por el hecho de que no pude encontrar a nadie que experimente el mismo problema.