2025, Oct 21 03:31

Matplotlib में ImportError: python-dateutil संस्करण असंगति कैसे ठीक करें

Matplotlib इम्पोर्ट पर ImportError मिल रहा है? python-dateutil संस्करण असंगति का कारण अक्सर गलत Python/venv-पिप पर्यावरण है. py -m pip से सही venv में अपग्रेड कर समाधान पाएं.

Matplotlib इम्पोर्ट नहीं हो पाता और ImportError देता है, जिसमें कहा जाता है कि पुराना dateutil मौजूद है, जबकि pip show हाल का python-dateutil संस्करण दिखाता है। ऊपर-ऊपर यह उलझाऊ लगता है, लेकिन कारण सरल है: पैकेज उस Python पर्यावरण में इंस्टॉल हुआ है, जो आपके स्क्रिप्ट को चलाने वाले पर्यावरण से अलग है।

त्रुटि को ट्रिगर करने वाला न्यूनतम उदाहरण

जैसे ही Python matplotlib को इम्पोर्ट करने की कोशिश करता है, समस्या सामने आ जाती है, इसलिए इसे दोहराने के लिए एक छोटा-सा स्क्रिप्ट भी काफी है।

from matplotlib import pyplot as charts
def app_start():
    return charts  # केवल pyplot को छूना ही इम्पोर्ट चेन को ट्रिगर करने के लिए पर्याप्त है
if __name__ == "__main__":
    app_start()

इस स्थिति में Python नीचे जैसी त्रुटि दिखाता है:

ImportError: Matplotlib requires dateutil>=2.7; you have 2.2

असल में हो क्या रहा है

Matplotlib की निर्भरता python-dateutil पर है, और उसका न्यूनतम आवश्यक संस्करण तय है। जो इंटरप्रेटर आपका स्क्रिप्ट चलाता है, वह उस dateutil को ढूँढ लेता है जो pip show से देखे गए संस्करण से अलग होता है। ऐसा तब होता है जब पैकेज एक इंटरप्रेटर/पर्यावरण में इंस्टॉल हो और कोड किसी दूसरे इंटरप्रेटर/पर्यावरण से चल रहा हो। आम वजहें हैं: मशीन पर Python की कई इंस्टॉलेशन होना, या venv के अंदर चलते समय पैकेज को ग्लोबल एन्वायरनमेंट में इंस्टॉल कर देना (या उल्टा)। dateutil नाम का पैकेज इंस्टॉल करने की कोशिश भी काम नहीं आती, क्योंकि pip बताता है कि उस नाम के लिए कोई डिस्ट्रीब्यूशन नहीं है; सही पैकेज का नाम python-dateutil है।

समाधान: pip को इंटरप्रेटर से संरेखित करें और अपना venv उपयोग करें

उपाय यह है कि जिस सटीक पर्यावरण में आपका कोड चलता है, उसी के भीतर python-dateutil को इंस्टॉल या अपग्रेड करें। Windows पर PowerShell में, प्रोजेक्ट का वर्चुअल एन्वायरनमेंट सक्रिय करें और pip को इंटरप्रेटर लॉन्चर के जरिए चलाएँ, ताकि इंस्टॉलेशन सही Python के तहत हो।

cd C:\Users\kystepa2\Desktop\NEXTSY_PROJECT
venv\Scripts\activate
py -m pip install --upgrade python-dateutil

इसके बाद वही न्यूनतम स्क्रिप्ट दोबारा चलाएँ। इम्पोर्ट सफल होगा, क्योंकि सक्रिय एन्वायरनमेंट में matplotlib को अब संगत python-dateutil संस्करण दिखाई देगा।

समाधान के बाद काम करने वाला स्क्रिप्ट

एप्लिकेशन कोड में बदलाव की जरूरत नहीं; मायने रखता है पर्यावरण का संरेखण। सक्रिय venv में नीचे वाला वही कोड चलाने पर सब अपेक्षित रूप से काम करता है।

from matplotlib import pyplot as charts
def app_start():
    return charts
if __name__ == "__main__":
    app_start()

रोजमर्रा के विकास के लिए यह क्यों अहम है

गलत pip का उपयोग करना या वर्चुअल एन्वायरनमेंट को सक्रिय करना भूल जाना, चुपचाप निर्भरताओं को उस Python में इंस्टॉल कर देता है जो आपके प्रोग्राम को चलाने वाले Python से अलग है। नतीजा होता है ऐसे असंगतियाँ जिन्हें डिबग करना मुश्किल है: शेल में पैकेज का सही संस्करण दिखता है, पर कोड चलाने वाला इंटरप्रेटर पुराना संस्करण इम्पोर्ट कर लेता है। पर्यावरण की स्वच्छ और सुसंगत आदतें इन विसंगतियों को रोकती हैं और लोकल डेवलपमेंट तथा CI में इंस्टॉल, इम्पोर्ट और रनटाइम व्यवहार को एक सुर में रखती हैं।

मुख्य बातें

इंस्टॉल या रन से पहले हमेशा लक्षित venv सक्रिय करें। pip को इंटरप्रेटर के जरिए py -m pip से चलाना बेहतर है, ताकि इंस्टॉलेशन उसी Python में हो जो आपका कोड चलाता है। यदि निर्भरता संस्करणों से जुड़ा ImportError दिखे, तो पहले पर्यावरण असंगति मानें और अपनी शेल, venv और pip को उस इंटरप्रेटर के साथ फिर से संरेखित करें जो स्क्रिप्ट चलाता है। और यदि आप dateutil नाम का पैकेज इंस्टॉल करने का सोच रहे हों, तो याद रखें pip पहले ही बता चुका है कि उस नाम का कोई डिस्ट्रीब्यूशन नहीं है; matplotlib के लिए सही निर्भरता python-dateutil है।

यह लेख StackOverflow के प्रश्न पर आधारित है, जिसे Konstantin Stepanov ने पूछा था, और AlirezaAliz के उत्तर पर।