فقط 1 روز مونده! از فردا تخفیف‌ های داغ مرداد سبزلرن شروع میشه؛ فرصت رو از دست نده.
00ثانیه
00دقیقه
00ساعت
00روز

رفع خطای ModuleNotFoundError در پایتون + روش‌های پیش گیری

نیلوفر ماشینینیلوفر ماشینی
27 مرداد 1405
8 دقیقه مطالعه
رفع خطای ModuleNotFoundError در پایتون

یکی از خطاهای رایج که بسیاری از برنامه‌نویسان به‌ویژه در مراحل ابتدایی در مسیر توسعه با پایتون با آن مواجه می‌شوند، خطای ModuleNotFoundError در پایتون است! خطایی که معمولا به‌دلیل ناهماهنگی در محیط اجرا، نصب نادرست پکیج‌ها یا تنظیمات اشتباه مسیرها رخ می‌دهد و می‌تواند روند اجرای پروژه را مختل کند. شناخت دقیق دلایل بروز این خطا و آشنایی با روش‌های پیشگیری و رفع آن، نقش مهمی در افزایش بهره‌وری و کاهش خطاهای توسعه دارد. در ادامه این مقاله از سبزلرن در مورد دلایل و روش‌های رفع آن بحث می‌کنیم تا به‌عنوان یک برنامه‌نویس پایتون بتوانید در صورت بروز خطا آن را در اسرع وقت برطرف کنید!

خطای ModuleNotFoundError در پایتون به چه معناست؟

خطای ModuleNotFoundError در پایتون یک نوع خطای زمان اجرا (Runtime Error) است که زمانی رخ می‌دهد که مفسر پایتون هنگام اجرای دستور import نتواند ماژول یا پکیجی که در کد به آن ارجاع داده شده را پیدا کند؛ به بیان دقیق‌تر، این خطا نشان می‌دهد که ماژول موردنظر یا اصلا در محیط فعلی نصب نشده، یا در مسیرهای جستجوی پایتون (Python Path) قرار ندارد، یا نام آن اشتباه نوشته شده است. این خطا در واقع زیرمجموعه‌ای از خطای ImportError است و به‌طور خاص برای حالتی استفاده می‌شود که خود ماژول به‌طور کامل یافت نشود، نه اینکه فقط بخشی از آن مشکل داشته باشد.

این خطا معمولا در پروژه‌هایی که با کتابخانه‌های خارجی، محیط‌های مجازی (virtual environments) یا ساختار پوشه‌ای پیچیده کار می‌کنند بیشتر دیده می‌شود، زیرا پایتون ماژول‌ها را فقط در مسیرهای مشخصی جستجو می‌کند و اگر آن‌ها در این مسیرها نباشند، اجرای برنامه متوقف می‌شود.

python-modulenotfounderror-causes.webp

چرا خطای ModuleNotFoundError رخ می‌دهد؟

هنگام استفاده از دستور import احتمال بروز خطای ModuleNotFoundError در پایتون زیاد است، این خطا نشان می‌دهد که مفسر پایتون نتوانسته ماژول مورد نظر را در مسیرهای جستجوی خود پیدا کند؛ اما از یک اشتباه ساده تایپی تا مشکلات پیچیده در محیط اجرا را شامل شود. در ادامه مهم‌ترین دلایل بروز این خطا را به‌صورت کامل و دسته‌بندی‌شده بررسی می‌کنیم:

نصب نبودن ماژول (Module Not Installed)

رایج‌ترین دلیل این خطا این است که ماژول موردنظر اصلا روی سیستم نصب نشده است. وقتی پایتون به کتابخانه‌ای که وجود ندارد ارجاع داده شود، طبیعتاً نمی‌تواند آن را پیدا کند و خطا می‌دهد.

اشتباه در نام ماژول (Incorrect Module Name)

اگر نام ماژول را اشتباه تایپ کنید (مثلا numpi به‌جای numpy)، پایتون قادر به تشخیص آن نخواهد بود. حتی تفاوت‌های کوچک مثل حروف بزرگ و کوچک یا خط تیره و آندرلاین هم می‌تواند باعث این خطا شود.

قرار نداشتن ماژول در مسیرهای جستجو (Python Path Issues)

پایتون فقط در مسیرهای مشخصی (مثل sys.path) به دنبال ماژول‌ها می‌گردد. اگر ماژول در این مسیرها نباشد یا متغیر محیطی "PYTHONPATH" به‌درستی تنظیم نشده باشد، ماژول پیدا نمی‌شود.

ساختار نادرست پروژه یا پکیج (Incorrect Project Structure)

در پروژه‌هایی که چند فایل دارند، اگر ساختار پوشه‌ها یا پکیج‌ها درست تعریف نشده باشد (مثلا نبود فایل init.py یا import اشتباه بین فایل‌ها)، پایتون نمی‌تواند ماژول‌ها را شناسایی کند.

استفاده از محیط مجازی اشتباه (Virtual Environment Issues)

اگر ماژول را در یک "virtual environment" نصب کرده باشید اما کد را در محیط دیگری اجرا کنید، پایتون به آن ماژول دسترسی نخواهد داشت. این یکی از خطاهای رایج در پروژه‌های حرفه‌ای است.

ناسازگاری نسخه‌های پایتون یا pip

گاهی ماژول در یک نسخه از پایتون نصب شده اما شما کد را با نسخه دیگری اجرا می‌کنید. همچنین ممکن است "pip" مربوط به یک نسخه متفاوت باشد که باعث می‌شود ماژول در محیط اشتباه نصب گردد.

مسیر اشتباه یا import نادرست (Relative vs Absolute Imports)

استفاده نادرست از "import"های نسبی و مطلق (relative / absolute) می‌تواند باعث شود تا پایتون مسیر ماژول را اشتباه تفسیر کند. این موضوع به‌خصوص در پروژه‌های بزرگ بسیار رایج است و باعث بروز خطای ModuleNotFoundError در پایتون می‌شود.

ناسازگاری نام پکیج و نام import

گاهی نامی که با "pip install" نصب می‌کنید با نامی که باید "import" کنید متفاوت است؛ این موضوع می‌تواند باعث سردرگمی و در نهایت بروز خطا شود.

عدم پشتیبانی یا وجود نداشتن ماژول

ممکن است ماژولی که سعی در "import" آن دارید برای نسخه پایتون شما وجود نداشته باشد یا اصلا دیگر پشتیبانی نشود. در این حالت نیز خطای ModuleNotFoundError در پایتون رخ می‌دهد.

fix-python-module-not-found-error.webp

روش‌های قطعی رفع خطای ModuleNotFoundError

توجه داشته باشید که خطای ModuleNotFoundError در پایتون یک علت مشخص ندارد، بلکه نتیجه‌ اختلال در فرآیند جستجوی ماژول توسط پایتون است. بنابراین رفع آن نیازمند بررسی چندین لایه از محیط اجرا، مسیرها و ساختار پروژه است. در ادامه تمام روش‌های قطعی و کاربردی برای حل این خطا را به‌صورت کامل و دسته‌بندی‌شده توضیح می‌دهیم تا بتوانید در صورت بروز خطا آن در اسرع وقت برطرف نمایید:

بررسی صحت نام ماژول

گاهی مشکل فقط یک اشتباه تایپی است. باید به‌صورت دقیق همان نامی را که در مستندات رسمی ماژول آمده استفاده کنید، چون حتی یک حرف اشتباه باعث می‌شود پایتون نتواند آن را پیدا کند!

اطمینان از نصب در محیط صحیح (Virtual Environment)

اگر از محیط مجازی استفاده می‌کنید، باید مطمئن شوید ماژول در همان محیطی نصب شده که کد را در آن اجرا می‌کنید؛ در غیر این صورت پایتون به آن دسترسی نخواهد داشت.

بررسی نسخه پایتون و pip

در بسیاری از موارد، ماژول در یک نسخه از پایتون نصب شده اما شما از نسخه دیگری برای اجرای برنامه استفاده می‌کنید. باید مطمئن شوید pip و python هر دو به یک نسخه اشاره دارند.

تنظیم مسیرهای جستجو (PYTHONPATH و sys.path)

پایتون فقط در مسیرهای مشخصی به دنبال ماژول‌ها می‌گردد. اگر ماژول در این مسیرها نباشد، باید مسیر آن را به PYTHONPATH اضافه کنید یا در کد با "sys.path.append()" تعریف کنید.

اصلاح ساختار پروژه

در پروژه‌های چندفایلی، اگر ساختار پوشه‌ها درست نباشد (مثلا نبود init.py یا قرارگیری اشتباه فایل‌ها)، پایتون نمی‌تواند ماژول‌ها را شناسایی کند. باید ساختار پروژه را استاندارد کنید.

استفاده صحیح از import (نسبی و مطلق)

اگر import ها به‌درستی نوشته نشده باشند؛ پایتون مسیر اشتباهی را جستجو می‌کند. در این حالت باید از import مطلق یا نسبی صحیح استفاده کنید.

اجرای برنامه از مسیر درست

پایتون مسیر جستجو را بر اساس فایل اجراشده تعیین می‌کند. اگر فایل را از مسیر اشتباه اجرا کنید، ممکن است ماژول‌ها پیدا نشوند. بنابراین باید برنامه را از ریشه پروژه اجرا کنید.

بررسی وجود واقعی ماژول

ممکن است ماژولی که قصد import آن را دارید اصلا وجود نداشته باشد (مثلاً اشتباه در مستندات یا کد). در این حالت باید نام صحیح یا جایگزین آن را پیدا کنید.

اگر می‌خواید پایتون رو اصولی و از پایه تا مباحث پیشرفته یاد بگیرید، پیشنهاد می‌کنیم سری به دوره جامع پایتون بزنید و مسیر یادگیریتون رو کامل‌تر کنید.

سازگاری نسخه‌ها (Python یا Library)

برخی ماژول‌ها با نسخه خاصی از پایتون سازگار هستند. اگر نسخه شما پشتیبانی نشود، حتی با نصب هم خطا دریافت می‌کنید و باید نسخه مناسب را استفاده کنید.

بررسی IDE یا محیط اجرا (مثل PyCharm یا Jupyter)

گاهی IDE از یک interpreter متفاوت استفاده می‌کند. باید تنظیمات interpreter در IDE را بررسی کنید تا با محیطی که ماژول در آن نصب شده هماهنگ باشد.

python-virtual-environment-structure.webp

تفاوت ModuleNotFoundError و ImportError چیست؟

خطای ModuleNotFoundError در پایتون و "ImportError" هر دو به فرآیند import مربوط هستند، اما از نظر سطح و نوع مشکل تفاوت مهمی دارند. به‌طور کلی ModuleNotFoundError زمانی رخ می‌دهد که پایتون اصلا نتواند ماژول مورد نظر را پیدا کند (مثلاً نصب نیست یا در مسیرها وجود ندارد)، اما ImportError یک خطای کلی‌تر است و زمانی ایجاد می‌شود که ماژول پیدا شده اما در فرآیند بارگذاری یا استفاده از آن مشکلی به‌وجود آمده باشد (مثل نبودن یک تابع داخل ماژول یا خطاهای داخلی آن).

ویژگی

ModuleNotFoundError

ImportError

نوع خطا

زیرمجموعه‌ای از ImportError

خطای عمومی import

زمان وقوع

وقتی ماژول اصلاً پیدا نشود

وقتی import با مشکل مواجه شود

علت اصلی

نصب نبودن یا نبود در مسیر

خطا در بارگذاری، وابستگی، یا ساختار

محدوده خطا

محدود و خاص

گسترده و عمومی

سطح دیباگ

ساده‌تر

 (تمرکز روی نصب/مسیر)

پیچیده‌تر

 (نیاز به بررسی داخلی ماژول)

چگونه از بروز این خطا در پروژه جلوگیری کنیم؟

برای جلوگیری از خطای ModuleNotFoundError در پایتون باید از ابتدا ساختار محیط توسعه را استاندارد نگه دارید: همیشه برای هر پروژه یک virtual environment جدا (با venv یا virtualenv) بسازید و قبل از نصب پکیج‌ها آن را فعال کنید، نصب‌ها را دقیقا با همان interpreter پروژه انجام دهید (مثلا python -m pip install)، وابستگی‌ها را در فایل requirements.txt ثبت و مدیریت کنید، در ابزارهایی مثل VS Code مطمئن شوید interpreter صحیح انتخاب شده، و از نام‌گذاری فایل‌ها مشابه نام پکیج‌ها (مثل requests.py) خودداری کنید تا تداخل import ایجاد نشود.

سوالات متداول

خطای No module named یعنی چه؟

یعنی پایتون نمی‌تواند ماژول موردنظر را در مسیرهای جستجوی خود مانند"site-packages" پیدا کند.

چرا با اینکه pip install کردم باز هم خطا می‌دهد؟

معمولاً پکیج در محیط یا نسخه‌ی دیگری از Python نصب شده و interpreter فعلی به آن دسترسی ندارد.

تفاوت pip و pip3 چیست؟

pip ممکن است به Python 2 یا 3 اشاره کند، اما pip3به‌صورت مشخص برای نصب پکیج روی Python 3 استفاده می‌شود.

چگونه بفهمم پکیج نصب شده است؟

با دستور pip list یا pip show package_name می‌توانید وجود و جزئیات پکیج را بررسی کنید.

چرا در VS Code خطای ModuleNotFoundError می‌گیرم؟

اغلب به‌خاطر انتخاب اشتباه interpreter یا فعال نبودن virtual environment در VSCode است.

آیا این خطا فقط در Django رخ می‌دهد؟

خیر، این خطا عمومی است و در هر پروژه پایتون (Flask، اسکریپت ساده و...) ممکن است رخ دهد.

آیا پاک کردن و نصب مجدد Python مشکل را حل می‌کند؟

خیر به‌صورت کلی و در اغلب موارد مشکل از تنظیمات محیط (env) یا مسیرها است، بنابراین پاک کردن و نصب مجدد پایتون تاثیر در رفع مشکل ندارد.

نظرات

برای ثبت نظر، لطفا وارد حساب کاربری خود شوید.
ورود یا عضویت
هنوز هیچ نظری ثبت نشده!

اولین نفری باش که برای این مقاله نظر میدی.