След като проучих кода, изглежда, че има някаква грешка при препратката към това импортиране. Погледнах във файла /lib/python3.2/site-packages/django/utils/six.py и открих къде е препратката към модула moves.zip_longest.
Първо беше тази препратка:
moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")
Което означава, че извикваше класа _MovedItems и ето го с препратката към моя модул, който се повреждаше.
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
Което след това наследява от класа _LazyDescr, но това е кратък малък обект. Не знам къде се объркаха нещата, ако преобразувате кортежа, който се предава в конструктора MovedAttribute, той препоставя правилно старата версия към новата. Не съм сигурен защо се проваля, но ако премахнете командата за импортиране във файла compiler.py и просто извикате директно itertools zip_longest, всичко работи.
Ето как изглежда това. Ако използвате Python 3, редактирайте файла /lib/python3.2/site-packages/mysql/connector/django/compiler.py и променете ред 6 от това:
from django.utils.six.moves import zip_longest as six_zip_longest
към това:
from itertools import zip_longest