Po przestudiowaniu kodu wygląda na to, że wystąpił jakiś błąd podczas odwoływania się do tego importu. Zajrzałem do pliku /lib/python3.2/site-packages/django/utils/six.py i znalazłem odniesienie do modułu move.zip_longest.
Pierwszym był ten odnośnik:
moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")
Co oznacza, że wywołał klasę _MovedItems, a tutaj jest z odniesieniem do mojego modułu, który się zepsuł.
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
Który następnie dziedziczy po klasie _LazyDescr, ale jest to krótki, mały obiekt. Nie wiem, gdzie coś poszło nie tak, jeśli zmapujesz przekazaną krotkę do konstruktora MovedAttribute, mapuje on poprawnie starą wersję na nową. Nie jestem pewien, dlaczego to się nie udaje, ale jeśli usuniesz instrukcję import z pliku compiler.py i po prostu wywołasz bezpośrednio itertools zip_longest, wszystko zadziała.
Oto jak to wygląda. Jeśli używasz Pythona 3, edytuj plik /lib/python3.2/site-packages/mysql/connector/django/compiler.py i zmień linię 6 z tego:
from django.utils.six.moves import zip_longest as six_zip_longest
do tego:
from itertools import zip_longest