Setelah mempelajari kodenya, sepertinya ada semacam kesalahan saat mereferensikan impor itu. Saya melihat ke dalam file /lib/python3.2/site-packages/Django/utils/six.py dan menemukan di mana referensinya adalah modul move.zip_longest.
Pertama adalah referensi ini:
moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")
Yang berarti ia memanggil kelas _MovedItems, dan ini dia dengan referensi ke modul saya yang rusak.
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
Yang kemudian mewarisi dari kelas _LazyDescr, tapi itu adalah objek kecil yang pendek. Saya tidak tahu di mana ada yang salah, jika Anda memetakan Tuple yang diteruskan ke konstruktor MovedAttribute itu memetakan dengan benar versi lama ke yang baru. Saya tidak yakin mengapa itu gagal tetapi jika Anda menghapus pernyataan impor di file compiler.py dan cukup memanggil itertools zip_longest secara langsung, semuanya berfungsi.
Berikut tampilannya. Jika Anda menggunakan Python 3, edit file /lib/python3.2/site-packages/mysql/connector/Django/compiler.py, dan ubah baris 6 dari ini:
from django.utils.six.moves import zip_longest as six_zip_longest
untuk ini:
from itertools import zip_longest