Po prostudování kódu to vypadá, že při odkazování na tento import došlo k nějaké chybě. Podíval jsem se do souboru /lib/python3.2/site-packages/django/utils/six.py a našel jsem odkaz na modul moves.zip_longest.
První byla tato reference:
moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")
Což znamená, že volalo třídu _MovedItems a tady je to s odkazem na můj modul, který se porouchal.
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
Který pak dědí z třídy _LazyDescr, ale to je malý malý objekt. Nevím, kde se stala chyba, pokud namapujete předávanou n-tici do konstruktoru MovedAttribute, namapuje správně starou verzi na novou. Nejsem si jistý, proč to selhává, ale pokud odstraníte příkaz import v souboru kompilátor.py a jednoduše přímo zavoláte itertools zip_longest, vše funguje.
Tady je to, jak to vypadá. Pokud používáte Python 3, upravte soubor /lib/python3.2/site-packages/mysql/connector/django/compiler.py a změňte řádek 6 z tohoto:
from django.utils.six.moves import zip_longest as six_zip_longest
na toto:
from itertools import zip_longest