कोड का अध्ययन करने के बाद ऐसा लगता है कि उस आयात को संदर्भित करते समय किसी प्रकार की त्रुटि है। मैंने /lib/python3.2/site-packages/django/utils/six.py फ़ाइल में देखा और पाया कि move.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 वर्ग से विरासत में मिलता है, लेकिन वह एक छोटी सी वस्तु है। मुझे नहीं पता कि चीजें कहां गलत हुईं, यदि आप मूव एट्रिब्यूट कंस्ट्रक्टर में पास किए जा रहे टपल को मैप करते हैं तो यह पुराने संस्करण को नए में सही ढंग से मैप करता है। मुझे यकीन नहीं है कि यह क्यों विफल हो रहा है, लेकिन यदि आप कंपाइलर.py फ़ाइल में आयात विवरण हटाते हैं और सीधे सीधे itertools zip_longest कहते हैं, तो यह सब काम करता है।
यहाँ ऐसा दिखता है। यदि आप पायथन 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