مشكلة وحل #4: حل خطأ ModuleNotFoundError: No module named في بايثون

مشكلة وحل 4: شرح خطأ ModuleNotFoundError No module named في بايثون عند عدم العثور على مكتبة

في هذا الدرس من سلسلة مشكلة وحل على موقع عرب بايثون، سنتحدث عن واحد من أشهر الأخطاء التي تظهر للمبتدئين أثناء تعلم بايثون، وهو خطأ:

ModuleNotFoundError: No module named 'requests'

هذا الخطأ قد يظهر لك عند تشغيل كود بايثون، فتظن أن الكود فيه مشكلة كبيرة، بينما السبب غالبًا بسيط جدًا: بايثون لا يستطيع العثور على المكتبة التي تحاول استخدامها.

في هذا المقال سنفهم معنى الخطأ، ولماذا يظهر، وكيف تحله خطوة بخطوة بطريقة سهلة تناسب المبتدئين.

إذا كنت جديدًا في بايثون، يمكنك أيضًا الرجوع إلى بداية كورس أساسيات بايثون حتى تراجع الأساسيات قبل الدخول في مشاكل المكتبات والتثبيت.

قصة المشكلة

أرسل لنا أحد متابعي عرب بايثون رسالة يقول فيها:

"كنت أحاول تشغيل كود بسيط يستخدم مكتبة requests لجلب بيانات من الإنترنت، لكن عند تشغيل الملف ظهر لي خطأ طويل، وفي نهايته مكتوب: ModuleNotFoundError: No module named 'requests'. جربت أعيد تشغيل البرنامج أكثر من مرة، لكن نفس المشكلة تظهر."

الكود الذي كان يحاول تشغيله كان بهذا الشكل:

import requests

response = requests.get("https://www.example.com")

print(response.status_code)

وعند تشغيل الكود ظهر له الخطأ التالي:

ModuleNotFoundError: No module named 'requests'

ما معنى ModuleNotFoundError في بايثون؟

معنى الخطأ ببساطة أن بايثون حاول استدعاء مكتبة أو ملف باستخدام الأمر import، لكنه لم يجد هذه المكتبة في بيئة التشغيل الحالية.

يعني عندما تكتب:

import requests

فأنت تقول لبايثون: استخدم مكتبة اسمها requests.

لكن إذا لم تكن هذه المكتبة مثبتة على جهازك، أو كانت مثبتة في بيئة مختلفة، سيظهر الخطأ:

ModuleNotFoundError: No module named 'requests'

لماذا يظهر خطأ No module named؟

هذا الخطأ يظهر غالبًا لأحد الأسباب التالية:

  • المكتبة غير مثبتة على جهازك.
  • المكتبة مثبتة، لكن في نسخة بايثون مختلفة.
  • أنت تستخدم بيئة افتراضية venv ولم تثبت المكتبة داخلها.
  • اسم المكتبة مكتوب بشكل خاطئ.
  • اسم ملفك يتعارض مع اسم مكتبة موجودة.

لا تقلق، سنشرح كل سبب بطريقة سهلة.

الحل الأول: تثبيت المكتبة باستخدام pip

أكثر سبب شائع لهذا الخطأ هو أن المكتبة غير مثبتة أصلًا.

في مثالنا، الخطأ يقول:

No module named 'requests'

هذا يعني أن مكتبة requests غير موجودة في بيئة بايثون الحالية.

لحل المشكلة، افتح موجه الأوامر أو Terminal واكتب:

pip install requests

بعد انتهاء التثبيت، شغّل الكود مرة أخرى.

إذا اشتغل الكود بدون خطأ، فهذا يعني أن المشكلة كانت فقط في عدم تثبيت المكتبة.

الحل الثاني: استخدم python -m pip

أحيانًا تكتب pip install، وتظهر لك رسالة أن المكتبة تم تثبيتها، لكن عند تشغيل البرنامج يظهر نفس الخطأ.

هذا يحدث غالبًا لأن أمر pip مرتبط بنسخة بايثون مختلفة عن النسخة التي تشغل بها الكود.

في هذه الحالة، استخدم الأمر التالي:

python -m pip install requests

أو إذا كان جهازك يستخدم الأمر python3:

python3 -m pip install requests

هذه الطريقة أفضل للمبتدئين لأنها تجعل التثبيت مرتبطًا بنفس نسخة بايثون التي تستخدمها.

الحل الثالث: تأكد من اسم المكتبة

أحيانًا يكون السبب بسيط جدًا: اسم المكتبة مكتوب بشكل خاطئ.

مثال خاطئ:

import request

والصحيح:

import requests

لاحظ الفرق بين request و requests. حرف واحد قد يسبب ظهور الخطأ.

الحل الرابع: انتبه من اسم ملفك

من الأخطاء الشائعة أن تسمي ملفك بنفس اسم المكتبة.

مثلاً إذا كنت تستخدم مكتبة requests، لا تجعل اسم ملفك:

requests.py

لأن بايثون قد يحاول استيراد ملفك بدل المكتبة الأصلية، وهذا يسبب مشاكل غريبة.

الأفضل أن تختار اسمًا واضحًا مثل:

test_requests.py

أو:

api_example.py

الحل الخامس: إذا كنت تستخدم بيئة افتراضية 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: 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؟
  • أم أنها ملف من ملفات مشروعي؟
  • هل كتبت الاسم بشكل صحيح؟
  • هل الملف موجود في نفس المسار؟

روابط مفيدة

إذا أردت فهم تثبيت الحزم في بايثون بشكل أعمق، يمكنك الرجوع إلى دليل تثبيت الحزم من Python Packaging.

ويمكنك أيضًا قراءة شرح الموديولات Modules في توثيق بايثون الرسمي حتى تفهم كيف يعمل الأمر import.

مقالات مقترحة من عرب بايثون

بعد حل هذه المشكلة، أنصحك بقراءة هذه المقالات:

خلاصة الحل

خطأ ModuleNotFoundError: No module named يعني أن بايثون لم يجد المكتبة أو الملف الذي تحاول استدعاءه.

لحل المشكلة، اتبع هذا الترتيب:

  1. تأكد من اسم المكتبة.
  2. ثبت المكتبة باستخدام pip install.
  3. إذا لم ينجح الأمر، استخدم python -m pip install.
  4. تأكد أنك تستخدم نفس نسخة بايثون التي ثبتت عليها المكتبة.
  5. إذا كنت تستخدم venv، ثبت المكتبة داخل البيئة الافتراضية.
  6. لا تسم ملفك بنفس اسم المكتبة.

تذكر دائمًا أن رسائل الخطأ في بايثون ليست عدوك. هي فقط تحاول أن تخبرك أين المشكلة. وكلما تعلمت قراءة هذه الرسائل، أصبحت أسرع في حل مشاكل البرمجة.

إرسال تعليق

أحدث أقدم