Efter at have studeret koden ser det ud til, at der er en form for fejl, når du refererer til den import. Jeg kiggede i filen /lib/python3.2/site-packages/django/utils/six.py og fandt, hvor referencen var til moves.zip_longest-modulet.
Først var denne reference:
moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")
Hvilket betyder, at den kaldte klassen _MovedItems, og her er den med henvisningen til mit modul, der gik i stykker.
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
Som så arver fra klassen _LazyDescr, men det er et kort lille objekt. Jeg ved ikke, hvor tingene gik galt, hvis du kortlægger tuplen, der sendes ind i MovedAttribute-konstruktøren, kortlægger den den gamle version korrekt til den nye. Jeg er ikke sikker på, hvorfor det fejler, men hvis du fjerner importerklæringen i compiler.py-filen og blot kalder itertools zip_longest direkte, virker det hele.
Sådan ser det ud. Hvis du bruger Python 3, skal du redigere filen /lib/python3.2/site-packages/mysql/connector/django/compiler.py og ændre linje 6 fra denne:
from django.utils.six.moves import zip_longest as six_zip_longest
til dette:
from itertools import zip_longest