Dopo aver studiato il codice, sembra che ci sia un qualche tipo di errore quando si fa riferimento a quell'importazione. Ho esaminato il file /lib/python3.2/site-packages/django/utils/six.py e ho trovato dove si trovava il riferimento al modulo moves.zip_longest.
Il primo era questo riferimento:
moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")
Ciò significa che stava chiamando la classe _MovedItems, ed eccola con il riferimento al mio modulo che si stava rompendo.
class _MovedItems(_LazyModule):
"""Lazy loading of moved objects"""
_moved_attributes = [
MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest")
class MovedAttribute(_LazyDescr):
def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None):
super(MovedAttribute, self).__init__(name)
if PY3:
if new_mod is None:
new_mod = name
self.mod = new_mod
if new_attr is None:
if old_attr is None:
new_attr = name
else:
new_attr = old_attr
self.attr = new_attr
Che poi eredita dalla classe _LazyDescr, ma questo è un piccolo oggetto corto. Non so dove le cose siano andate storte, se mappi la tupla passata al costruttore MovedAttribute, mappa correttamente la vecchia versione a quella nuova. Non sono sicuro del motivo per cui sta fallendo, ma se rimuovi l'istruzione import nel file compiler.py e chiami semplicemente itertools zip_longest direttamente, funziona tutto.
Ecco come appare. Se stai usando Python 3, modifica il file /lib/python3.2/site-packages/mysql/connector/django/compiler.py e cambia la riga 6 da questa:
from django.utils.six.moves import zip_longest as six_zip_longest
a questo:
from itertools import zip_longest