مرحبًا بك في حلقة جديدة من سلسلة مشكلة وحل على موقع بايثون العرب. في هذا المقال سنشرح واحدًا من أشهر أخطاء بايثون التي تظهر للمبتدئين عند استخدام المكتبات، وهو خطأ:
ModuleNotFoundError: No module named 'requests'
هذا الخطأ قد يظهر لك عند تشغيل كود يستخدم مكتبة خارجية مثل requests أو pandas أو numpy، فتظن أن المشكلة في الكود نفسه، بينما السبب غالبًا أبسط من ذلك: بايثون لا يستطيع العثور على المكتبة التي تحاول استدعاءها.
في هذا الدرس سنفهم معنى الخطأ، ولماذا يظهر، وكيف تحله خطوة بخطوة باستخدام pip و python -m pip، مع شرح أهم الأسباب التي تجعل الخطأ يستمر حتى بعد تثبيت المكتبة.
{getToc} $title={محتوى المقال}
{alertInfo} إذا كنت جديدًا في بايثون، يمكنك مراجعة بداية كورس أساسيات بايثون للمبتدئين قبل التعمق في مشاكل المكتبات والتثبيت.
قصة المشكلة
لنفترض أنك كتبت كودًا بسيطًا يستخدم مكتبة requests لجلب بيانات من موقع على الإنترنت:
import requests
response = requests.get("https://www.example.com")
print(response.status_code)
لكن عند تشغيل الملف تظهر لك رسالة خطأ مشابهة لهذه:
ModuleNotFoundError: No module named 'requests'
معنى الرسالة أن بايثون وصل إلى السطر الذي يحتوي على import requests، لكنه لم يجد مكتبة بهذا الاسم داخل بيئة التشغيل الحالية.
ما معنى ModuleNotFoundError في بايثون؟
خطأ ModuleNotFoundError يعني أن بايثون حاول استيراد مكتبة أو ملف باستخدام الأمر import، لكنه لم يستطع العثور عليه.
عندما تكتب:
import requests
فأنت تطلب من بايثون استخدام مكتبة اسمها requests. إذا لم تكن المكتبة مثبتة، أو كانت مثبتة في نسخة بايثون مختلفة، أو كنت تستخدم بيئة افتراضية لم تثبت فيها المكتبة، سيظهر خطأ:
ModuleNotFoundError: No module named 'requests'
لماذا يظهر خطأ No module named؟
هذا الخطأ يظهر غالبًا لواحد من الأسباب التالية:
- المكتبة غير مثبتة على جهازك.
- المكتبة مثبتة، لكن في نسخة بايثون مختلفة عن النسخة التي تشغل بها الكود.
- أنت تستخدم بيئة افتراضية
venvولم تثبت المكتبة داخلها. - اسم المكتبة مكتوب بشكل خاطئ.
- اسم ملفك يتعارض مع اسم المكتبة.
- تحاول استيراد ملف محلي غير موجود في نفس مسار المشروع.
{alertSuccess} الرسالة No module named لا تعني دائمًا أن الكود صعب أو أن المشروع تالف. غالبًا هي مشكلة تثبيت أو مسار أو اسم مكتبة.
الحل الأول: تثبيت المكتبة باستخدام pip
أكثر سبب شائع لظهور هذا الخطأ هو أن المكتبة غير مثبتة أصلًا.
إذا كان الخطأ يقول:
ModuleNotFoundError: No module named 'requests'
فهذا يعني أن مكتبة requests غير موجودة في بيئة بايثون الحالية. لحل المشكلة افتح موجه الأوامر أو Terminal واكتب:
pip install requests
بعد انتهاء التثبيت، شغّل الملف مرة أخرى. إذا اختفى الخطأ، فهذا يعني أن المشكلة كانت فقط في عدم تثبيت المكتبة.
الحل الثاني: استخدم python -m pip
أحيانًا تكتب pip install requests وتظهر لك رسالة أن المكتبة تم تثبيتها، لكن عند تشغيل الكود يظهر نفس الخطأ مرة أخرى.
هذا يحدث غالبًا لأن أمر pip مرتبط بنسخة بايثون مختلفة عن النسخة التي تشغل بها البرنامج.
الحل الأفضل في هذه الحالة هو استخدام:
python -m pip install requests
وإذا كنت تستخدم python3 بدل python:
python3 -m pip install requests
{alertInfo} استخدام python -m pip أفضل للمبتدئين لأنه يضمن أن التثبيت يتم لنفس نسخة بايثون التي تستخدمها في تشغيل البرنامج.
الحل الثالث: تأكد من اسم المكتبة
أحيانًا يكون سبب الخطأ بسيطًا جدًا: اسم المكتبة مكتوب بشكل غير صحيح.
مثال خاطئ:
import request
والصحيح:
import requests
لاحظ أن اسم المكتبة الصحيح هو requests وليس request. أحيانًا حرف واحد يكفي لظهور الخطأ.
الحل الرابع: لا تسم ملفك باسم المكتبة
من الأخطاء الشائعة أن تسمي ملفك بنفس اسم المكتبة التي تريد استخدامها.
إذا كنت تستخدم مكتبة requests، لا تجعل اسم ملفك:
requests.py
لأن بايثون قد يحاول استيراد ملفك بدل المكتبة الأصلية، وهذا يسبب أخطاء مربكة.
استخدم اسمًا مختلفًا وواضحًا مثل:
api_example.py
أو:
test_requests_code.py
{alertWarning} بعد تغيير اسم الملف، احذف أيضًا أي مجلد اسمه __pycache__ إذا كان موجودًا داخل نفس مجلد المشروع، ثم جرّب تشغيل الكود مرة أخرى.
الحل الخامس: إذا كنت تستخدم بيئة افتراضية venv
إذا كنت تستخدم بيئة افتراضية في بايثون، فيجب أن تثبت المكتبة داخل نفس البيئة، وليس خارجها.
لإنشاء بيئة افتراضية:
python -m venv myenv
على ويندوز، فعّل البيئة بهذا الأمر:
myenv\Scripts\activate
ثم ثبت المكتبة:
pip install requests
على macOS أو Linux:
source myenv/bin/activate
ثم:
pip install requests
بعد ذلك شغّل الملف وأنت داخل البيئة نفسها.
كيف أتأكد أن المكتبة مثبتة؟
يمكنك التأكد من تثبيت المكتبة باستخدام الأمر:
pip show requests
إذا كانت المكتبة مثبتة، ستظهر لك معلومات مثل اسم الحزمة، الإصدار، ومكان التثبيت.
ويمكنك أيضًا اختبار الاستيراد مباشرة من سطر الأوامر:
python -c "import requests; print(requests.__version__)"
إذا ظهر رقم الإصدار بدون خطأ، فهذا يعني أن المكتبة تعمل بشكل صحيح.
مثال بعد حل المشكلة
بعد تثبيت مكتبة requests، جرّب تشغيل الكود التالي:
import requests
response = requests.get("https://www.python.org")
print("Status Code:", response.status_code)
إذا ظهرت لك نتيجة مثل:
Status Code: 200
فهذا يعني أن المكتبة تعمل، وأن الخطأ تم حله بنجاح.
أخطاء مشابهة لخطأ ModuleNotFoundError
قد يظهر نفس الخطأ مع مكتبات أخرى، مثل:
ModuleNotFoundError: No module named 'pandas'
ModuleNotFoundError: No module named 'numpy'
ModuleNotFoundError: No module named 'flask'
ModuleNotFoundError: No module named 'django'
والحل غالبًا يكون بنفس الفكرة:
python -m pip install اسم_المكتبة
مثال:
python -m pip install pandas
متى لا يكون الحل pip install؟
ليس كل خطأ No module named يعني أنك تحتاج تثبيت مكتبة من الإنترنت.
أحيانًا تكون تحاول استيراد ملف محلي داخل مشروعك، مثل:
import tools
في هذه الحالة يجب أن يكون لديك ملف اسمه tools.py في نفس مجلد المشروع، أو داخل مسار يستطيع بايثون الوصول إليه.
قبل تثبيت أي مكتبة، اسأل نفسك:
- هل هذه مكتبة خارجية مثل
requestsأوpandas؟ - أم أنها ملف من ملفات مشروعي؟
- هل كتبت الاسم بشكل صحيح؟
- هل الملف موجود في نفس المسار؟
جدول سريع لحل الخطأ
| سبب الخطأ | الحل المناسب |
|---|---|
| المكتبة غير مثبتة | استخدم pip install library-name |
| pip يثبت في نسخة بايثون مختلفة | استخدم python -m pip install library-name |
| اسم المكتبة خطأ | راجع الاسم من التوثيق أو صفحة المكتبة |
| تستخدم venv | فعّل البيئة ثم ثبت المكتبة داخلها |
| اسم الملف مثل اسم المكتبة | غيّر اسم الملف واحذف __pycache__ |
| ملف محلي غير موجود | تأكد أن الملف موجود في نفس المسار |
روابط مفيدة
- فن قراءة رسائل الخطأ في بايثون للمبتدئين
- طريقة تثبيت Python على الكمبيوتر خطوة بخطوة
- أفضل 5 أدوات مجانية للمبتدئين في بايثون
- محرر بايثون العرب لتجربة الأكواد أونلاين
- دليل تثبيت الحزم من Python Packaging
- شرح Modules في توثيق Python الرسمي
الخلاصة
خطأ ModuleNotFoundError: No module named يعني أن بايثون لم يجد المكتبة أو الملف الذي تحاول استدعاءه. غالبًا يظهر الخطأ لأن المكتبة غير مثبتة، أو لأنك تستخدم نسخة بايثون مختلفة، أو لأنك تعمل داخل بيئة افتراضية لم تثبت فيها المكتبة.
ابدأ دائمًا بالتأكد من اسم المكتبة، ثم جرّب التثبيت باستخدام python -m pip install، وتأكد أنك تشغل الكود بنفس نسخة بايثون التي ثبتت عليها الحزمة.
{alertSuccess} الخلاصة السريعة: عندما ترى No module named، لا تذعر. اقرأ اسم المكتبة داخل الرسالة، ثم تأكد من الاسم والتثبيت والبيئة التي تعمل عليها.