نفذت 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 بينما مشروعك يعمل في بيئة أخرى.
الخطوة 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)
المسار الظاهر يجب أن يكون المفسر الذي تريد العمل به.
إذا كنت تستخدم 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 والطرفية لا يعملان بنفس البيئة.
هل اسم ملفك يتعارض مع المكتبة؟
إذا أنشأت ملفًا باسم:
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 Code | Interpreter مختلف | افحص sys.executable |
| يعمل خارج venv ويفشل داخلها | الحزمة مثبتة خارج البيئة | فعّل venv ثم ثبّت الحزمة |
| يفشل في Jupyter فقط | Kernel مختلف | ثبّت عبر sys.executable |
| الحزمة موجودة لكن import غير معروف | اسم التثبيت يختلف عن اسم الاستيراد | راجع اسم import |
| الخطأ بدأ بعد إنشاء ملف جديد | تعارض اسم محلي | غيّر اسم الملف أو المجلد |
ترتيب الحل الذي أنصح به
- اطبع
sys.executable. - نفذ
python -m pip show اسم-الحزمة. - اختبر الاستيراد من الطرفية بنفس Python.
- راجع Interpreter في VS Code عند الحاجة.
- فعّل
venvقبل التثبيت إذا كنت تستخدمها. - افحص Kernel داخل Jupyter.
- راجع اسم الحزمة مقابل اسم
import. - راجع أسماء ملفات المشروع.
- أعد التثبيت فقط بعد تحديد البيئة الصحيحة.
روابط داخلية مفيدة
- حل ModuleNotFoundError: No module named في بايثون
- شرح البيئة الافتراضية venv في بايثون
- حل python is not recognized في Windows
- مكتبة أوامر بايثون
الخلاصة
إذا كانت المكتبة مثبتة وما زال 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.



