حل ModuleNotFoundError بعد pip install: لماذا لا يجد بايثون المكتبة؟ | مشكلة وحل 33

حل ModuleNotFoundError بعد pip install عندما لا يجد بايثون المكتبة

نفذت pip install requests وظهرت رسالة أن التثبيت نجح، ثم شغلت الكود وظهر من جديد:

ModuleNotFoundError: No module named 'requests'

هنا لا تبدأ بإعادة التثبيت عشوائيًا. في كثير من الحالات تكون المكتبة موجودة فعلًا، لكن البرنامج يعمل باستخدام مفسر بايثون مختلف عن المفسر الذي ثُبتت فيه الحزمة.

هذا الدرس مخصص لهذه الحالة فقط: المكتبة مثبتة لكن بايثون لا يجدها. سنطابق Python مع pip، ثم نعالج VS Code وvenv وJupyter واختلاف اسم الحزمة عن اسم import.

{alertInfo} إذا كانت المكتبة غير مثبتة أصلًا أو تريد شرحًا عامًا لكل أسباب No module named، راجع حل خطأ ModuleNotFoundError: No module named في بايثون. هذا الدرس يركز على استمرار الخطأ بعد التثبيت.

{getToc} $title={محتوى المقال}

الحل السريع: استخدم python -m pip

بدل:

pip install requests

استخدم:

python -m pip install requests

وفي Windows يمكن أن تستخدم:

py -m pip install requests

الفائدة أن pip يعمل من خلال مفسر Python الذي حددته، فتقل احتمالية تثبيت الحزمة في نسخة أخرى.

{alertSuccess}القاعدة: ثبّت الحزمة باستخدام نفس Python الذي سيشغّل البرنامج.

لماذا يحدث الخطأ رغم نجاح التثبيت؟

قد يحتوي الجهاز على أكثر من Python: نسخة عامة، ونسخة داخل venv، ومفسر اختاره VS Code، وKernel مختلف في Jupyter. لذلك قد ترى Requirement already satisfied بينما مشروعك يعمل في بيئة أخرى.

اختلاف مسار pip عن مفسر Python يسبب ModuleNotFoundError

الخطوة 1: اعرف Python الذي يشغّل الكود

ضع داخل البرنامج:

import sys

print(sys.executable)

أو نفذ من الطرفية:

python -c "import sys; print(sys.executable)"

هذا المسار هو المرجع الحقيقي للمفسر الذي تستخدمه.

الخطوة 2: افحص pip والحزمة من خلال نفس المفسر

python -m pip --version
python -m pip show requests

الأمر الثاني يعرض معلومات الحزمة وموقع تثبيتها. إذا لم يجدها هذا الأمر، فالحزمة ليست مثبتة في البيئة التي يشير إليها python الحالي.

اختبار حاسم في 3 أوامر

python -c "import sys; print(sys.executable)"
python -m pip show requests
python -c "import requests; print(requests.__file__)"

إذا نجح السطر الثالث، فـrequests تعمل مع هذا المفسر. إذا فشل المشروع داخل محرر فقط، فافحص المفسر الذي يستخدمه المحرر.

Windows: هل python وpip يشيران إلى مكانين مختلفين؟

where python
where pip

إذا ظهر أكثر من مسار، فقد تكون لديك نسخ متعددة. لا تحاول إصلاح ذلك بتثبيت الحزمة مرارًا؛ استخدم python -m pip مع المفسر الذي تريد تشغيل المشروع به.

Linux وmacOS

which python
which python3
which pip
which pip3

إذا كنت تشغّل المشروع بـpython3 فاستخدم معه:

python3 -m pip install requests

إذا كانت المشكلة داخل VS Code فقط

قد تعمل المكتبة في الطرفية وتفشل داخل VS Code لأن المحرر اختار Interpreter مختلفًا. افتح Python: Select Interpreter، واختر المفسر الصحيح، ثم افتح Terminal جديدة ونفذ:

python -m pip install requests

وللتأكد، شغّل داخل الملف:

import sys

print(sys.executable)

المسار الظاهر يجب أن يكون المفسر الذي تريد العمل به.

اختيار Python Interpreter الصحيح في VS Code لحل ModuleNotFoundError

إذا كنت تستخدم venv

أنشئ البيئة:

python -m venv venv

Windows:

venv\Scripts\activate

Linux وmacOS:

source venv/bin/activate

ثم:

python -m pip install requests
python -m pip show requests
python main.py

إذا ثبتّ الحزمة خارج البيئة ثم شغلت المشروع داخلها، فلن تراها البيئة عادةً. ويمكنك مراجعة شرح venv في بايثون.

اسم الحزمة قد يختلف عن اسم import

مثال:

python -m pip install beautifulsoup4
from bs4 import BeautifulSoup

ومثال آخر:

python -m pip install pillow
from PIL import Image

إذن نجاح تثبيت اسم معيّن لا يعني أن نفس الاسم هو ما تكتبه داخل import.

اختبر مسار المكتبة نفسها

import requests

print(requests.__file__)

إذا نجح الاستيراد، سيظهر المسار الذي تم تحميل requests منه. هذا أقوى من الاكتفاء برسالة أن الحزمة مثبتة.

حل المشكلة في Jupyter Notebook

اعرف أولًا المفسر الذي يستخدمه Kernel:

import sys

print(sys.executable)

ثم ثبّت الحزمة من خلاله:

import sys

!{sys.executable} -m pip install requests

بعدها أعد تشغيل Kernel وجرّب الاستيراد. السبب الشائع هنا أن Jupyter والطرفية لا يعملان بنفس البيئة.

حل ModuleNotFoundError في Jupyter باستخدام sys.executable

هل اسم ملفك يتعارض مع المكتبة؟

إذا أنشأت ملفًا باسم:

requests.py

فقد يتداخل مع الاستيراد ويسبب أخطاء مربكة. استخدم اسمًا مختلفًا مثل:

http_request_example.py

وتأكد أيضًا من عدم وجود مجلد محلي يحمل اسم المكتبة نفسها.

إعادة التثبيت: اجعلها آخر خطوة

بعد التأكد من المفسر والبيئة واسم الاستيراد:

python -m pip uninstall requests
python -m pip install requests

ويمكنك فحص pip أو تحديثه عند الحاجة:

python -m pip --version
python -m pip install --upgrade pip
{alertWarning}إذا كان VS Code أو Jupyter يستخدم مفسرًا مختلفًا، فإن إعادة التثبيت في البيئة الخطأ لن تحل المشكلة.

جدول تشخيص سريع

الحالةالسبب الأقربالحل الأول
pip install نجح والخطأ مستمرpip وPython في بيئتين مختلفتينpython -m pip show package
يعمل في Terminal ويفشل في VS CodeInterpreter مختلفافحص sys.executable
يعمل خارج venv ويفشل داخلهاالحزمة مثبتة خارج البيئةفعّل venv ثم ثبّت الحزمة
يفشل في Jupyter فقطKernel مختلفثبّت عبر sys.executable
الحزمة موجودة لكن import غير معروفاسم التثبيت يختلف عن اسم الاستيرادراجع اسم import
الخطأ بدأ بعد إنشاء ملف جديدتعارض اسم محليغيّر اسم الملف أو المجلد

ترتيب الحل الذي أنصح به

  1. اطبع sys.executable.
  2. نفذ python -m pip show اسم-الحزمة.
  3. اختبر الاستيراد من الطرفية بنفس Python.
  4. راجع Interpreter في VS Code عند الحاجة.
  5. فعّل venv قبل التثبيت إذا كنت تستخدمها.
  6. افحص Kernel داخل Jupyter.
  7. راجع اسم الحزمة مقابل اسم import.
  8. راجع أسماء ملفات المشروع.
  9. أعد التثبيت فقط بعد تحديد البيئة الصحيحة.

روابط داخلية مفيدة

الخلاصة

إذا كانت المكتبة مثبتة وما زال ModuleNotFoundError يظهر، فالسؤال الصحيح ليس «هل ثبّتّها؟» بل أين ثبّتّها، وأي Python يشغّل الكود؟

python -c "import sys; print(sys.executable)"
python -m pip show اسم-الحزمة
python -c "import اسم_الوحدة; print('OK')"
{alertSuccess}القاعدة الذهبية: اربط التثبيت بالمفسر نفسه باستخدام python -m pip، ثم تحقق من sys.executable.

أسئلة شائعة

لماذا يظهر ModuleNotFoundError مع أن pip يقول Requirement already satisfied؟

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

كيف أعرف أي Python يشغّل برنامجي؟

اطبع sys.executable داخل البرنامج.

هل أستخدم pip أم python -m pip؟

عند تشخيص اختلاف البيئات استخدم python -m pip حتى تربط pip بالمفسر الذي حددته.

لماذا تعمل المكتبة في CMD ولا تعمل في VS Code؟

غالبًا لأن VS Code اختار Interpreter مختلفًا عن المستخدم في CMD.

لماذا تعمل المكتبة خارج venv ولا تعمل داخلها؟

لأن البيئة الافتراضية معزولة عن الحزم المثبتة خارجها عادةً، لذلك ثبّت الحزمة داخل البيئة بعد تفعيلها.

كيف أحل المشكلة في Jupyter؟

اعرف المفسر بواسطة sys.executable داخل الدفتر، وثبّت الحزمة من خلاله، ثم أعد تشغيل Kernel.

هل اسم الحزمة في pip يجب أن يساوي اسم import؟

لا. مثلًا تثبّت beautifulsoup4 وتستورد bs4، وتثبت pillow وتستورد PIL.

إرسال تعليق

أحدث أقدم