2025, Sep 28 15:47
pip इंस्टॉल के बाद भी import विफल? सही मॉड्यूल नाम चुनें
Python में पैकेज इंस्टॉल के बाद भी import पर ModuleNotFoundError? flask-Humanify बनाम flask_humanify का फर्क समझें, pip show से सही मॉड्यूल नाम जानें.
Python बताता है कि पैकेज इंस्टॉल हो चुका है, लेकिन import करते ही ModuleNotFoundError आता है। अगर यह स्थिति जानी‑पहचानी लगती है, तो वजह अक्सर pip में दिखने वाले डिस्ट्रीब्यूशन नाम और असल में इम्पोर्ट किए जाने वाले मॉड्यूल नाम के बीच असंगति होती है। नीचे flask-Humanify के साथ क्या हो रहा है और इसे जल्दी कैसे ठीक करें—उसका संक्षिप्त मार्गदर्शक है।
समस्या का सार
आप पैकेज इंस्टॉल करते हैं और pip सफल होने की पुष्टि करता है:
/usr/local/bin/python3.6 -m pip install flask_Humanify
इंटरप्रेटर और pip स्पष्ट रूप से एक ही वातावरण में हैं:
/usr/local/bin/python3.6 --version
Python 3.6.3
/usr/local/bin/python3.6 -m pip --version
pip 21.3.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
pip list -v
...
flask-Humanify         0.2.3 /usr/local/lib/python3.6/site-packages pip
...
लेकिन कोड चलाने पर import त्रुटि आती है:
/usr/local/bin/python3.6 test.py
Traceback (most recent call last):
  File "once.py", line 29, in <module>
    from flask_Humanify import Humanify
ModuleNotFoundError: No module named 'flask_Humanify'
सबसे छोटा विफल उदाहरण
नीचे दी गई import पंक्ति से वही समस्या दोहर जाती है। लोकल उपनाम (alias) मनमाना है और व्यवहार पर असर नहीं डालता; विफलता का कारण मॉड्यूल पथ है।
# test_app.py
from flask_Humanify import Humanify as HumanifyAlias
यह क्यों टूटता है
Imports में अक्षर-मात्रा (case) मायने रखती है। इंस्टॉल किया गया डिस्ट्रीब्यूशन flask-Humanify नाम से है, लेकिन जो मॉड्यूल इम्पोर्ट किया जाता है उसका नाम flask_humanify है। यही अंतर mixed‑case वाले रूप (Flask के बाद underscore के साथ) का उपयोग करने पर ModuleNotFoundError पैदा कर देता है। इंस्टॉल हुई फाइलों को जाँचने पर यह स्पष्ट हो जाता है। pip से फाइल सूची निकालने पर दिखता है कि शीर्ष‑स्तरीय पैकेज डायरेक्टरी लोअरकेस और underscore के साथ है:
$ py3/scripts/pip show flask-Humanify --files
Name: flask-Humanify
Version: 0.2.3
...
Files:
  flask_humanify-0.2.3.dist-info\INSTALLER
  flask_humanify-0.2.3.dist-info\METADATA
  flask_humanify-0.2.3.dist-info\RECORD
  flask_humanify-0.2.3.dist-info\REQUESTED
  flask_humanify-0.2.3.dist-info\WHEEL
  flask_humanify-0.2.3.dist-info\licenses\LICENSE
  flask_humanify-0.2.3.dist-info\top_level.txt
  flask_humanify\__init__.py
  flask_humanify\humanify.py
  ...
सही मॉड्यूल नाम पर स्विच करते ही त्रुटि तुरंत गायब हो जाती है। यही विसंगति नीचे दी गई इंटरैक्टिव सत्र में भी दिखती है:
>>> from flask_Humanify import Humanify
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'flask_Humanify'
>>> from flask_humanify import Humanify
>>>
यहां भ्रम होना आसान है क्योंकि डॉक्यूमेंटेशन में भी यही टाइपो है, जिससे गलत रूप भी सही सा लगता है।
समाधान
उसी कार्यक्षमता को रखते हुए सही मॉड्यूल नाम से क्लास इम्पोर्ट करें। उपनाम (alias) वैकल्पिक है; यहाँ स्थानीय नाम अलग रखने के लिए इस्तेमाल किया गया है।
# fixed_test_app.py
from flask_humanify import Humanify as HumanifyAlias
जल्दी पुष्टि कैसे करें
यदि आपको इम्पोर्ट पथ को लेकर संदेह है, तो pip के जरिए इंस्टॉल हुई फाइलें देखना त्वरित पुष्टि का तरीका है। निम्न कमांड से मॉड्यूल के शीर्ष‑स्तरीय पैकेज का नाम पता चलता है और पुष्टि होती है कि वह flask_humanify है:
.../pip show --files flask-Humanify
आउटपुट में पैकेज डायरेक्टरी का नाम देखकर सही इम्पोर्ट पथ मिल जाता है।
यह क्यों महत्वपूर्ण है
डिस्ट्रीब्यूशन नाम को मॉड्यूल नाम समझ लेना ModuleNotFoundError का आम कारण है, खासकर तब जब किसी प्रोजेक्ट में एक जगह mixed case या विराम चिह्न हों और इम्पोर्ट पथ में अलग शैली। इस मामले में पैकेज के README में भी गलत import पंक्ति दी हुई है, जिससे भ्रम और बढ़ता है। इम्पोर्ट पथ साफ करना समय बचाता है और अनावश्यक वातावरण छेड़छाड़ से बचाता है।
इंस्टॉलेशन आउटपुट से एक व्यावहारिक सीख भी मिलती है: root के रूप में pip चलाना अनुशंसित नहीं है, और चेतावनी स्पष्ट रूप से वर्चुअल एनवायरनमेंट का सुझाव देती है। यह इस विशेष त्रुटि का कारण नहीं था, फिर भी रोज़मर्रा के Python काम के लिए यह अहम याद दिलाता है।
मुख्य बातें
जब Python कहे कि पैकेज इंस्टॉल है लेकिन import असफल हो, तो डिस्ट्रीब्यूशन नाम नहीं, इम्पोर्ट किए जाने वाले मॉड्यूल का नाम जाँचें। flask-Humanify के लिए सही इम्पोर्ट पथ flask_humanify है, और उसके अंदर की क्लास Humanify है। एक तेज pip show --files जाँच आपको बताती है कि किस शीर्ष‑स्तरीय पैकेज डायरेक्टरी को इम्पोर्ट करना है। case पर ध्यान दें, इंस्टॉल फाइलों के बारे में pip जो दिखाता है उस पर भरोसा करें, और इंस्टॉलर के सुझाव के अनुसार वर्चुअल एनवायरनमेंट को प्राथमिकता दें।