اگر بسته را نصب کرده‌اید اما ModuleNotFoundError می‌بینید، ابتدا بررسی کنید نصب و اجرا با یک مفسر انجام شده‌اند. رایج‌ترین مسیر تشخیص، مقایسهٔ sys.executable با خروجی python -m pip --version است. نصب چندباره بدون این بررسی ممکن است فقط محیط‌های بیشتری را تغییر دهد.

تشخیص را از داخل برنامه شروع کنید

import sys
import importlib.util

print(sys.executable)
print(sys.version.split()[0])
print(importlib.util.find_spec("json") is not None)

مسیر چاپ‌شده همان مفسری است که واقعاً برنامه را اجرا می‌کند. در VS Code، نوت‌بوک و ترمینال ممکن است سه انتخاب متفاوت وجود داشته باشد. نصب در ترمینال، kernel نوت‌بوک را خودکار عوض نمی‌کند.

محیط مستقل با مسیر صریح

در پوشهٔ پروژه و روی ویندوز:

python -m venv .venv
.\.venv\Scripts\python.exe -m pip --version
.\.venv\Scripts\python.exe -m pip install numpy pandas
.\.venv\Scripts\python.exe -c "import numpy, pandas; print(numpy.__version__, pandas.__version__)"

در Linux و macOS مسیر مفسر محیط معمولاً .venv/bin/python است. فعال‌سازی محیط فقط دسترسی کوتاه‌تر به همین مسیرها ایجاد می‌کند؛ اجرای مستقیم مفسر محیط هم معتبر است. برای اجرای مثال‌های دوره مجبور به تغییر سراسری سیاست اجرای PowerShell نیستید.

نام بسته با نام import همیشه یکی نیست

بستهٔ scikit-learn با نام sklearn وارد می‌شود. Pillow نیز معمولاً از مسیر PIL استفاده می‌شود. بر اساس متن خطا نام یک بستهٔ حدسی را نصب نکنید؛ نام نصب را از مستندات رسمی همان ابزار بگیرید. ماژول‌هایی مانند json، math و pathlib هم در کتابخانهٔ استاندارد هستند و نصب جداگانه نمی‌خواهند.

اگر فایل پروژهٔ شما pandas.py یا json.py نام دارد، می‌تواند واردکردن بستهٔ اصلی را مختل کند. مسیر traceback و module.__file__ در تشخیص این برخورد نام کمک می‌کند. فایل خودتان را با نامی مربوط به مسئله، مثل sales_report.py، نام‌گذاری کنید.

requirements چه چیزی را ثبت می‌کند؟

فایل وابستگی‌ها مشخص می‌کند پروژه به چه بسته‌هایی نیاز دارد. قفل‌کردن نسخه‌ها تکرارپذیری را بهتر می‌کند، ولی سازگاری سیستم‌عامل، نسخهٔ پایتون و وابستگی‌های بومی همچنان مهم است. pip freeze همهٔ بسته‌های نصب‌شده در محیط فعلی را فهرست می‌کند؛ اگر محیط شلوغ باشد، وابستگی‌های نامربوط هم وارد فایل می‌شوند.

در دورهٔ پیشرفتهٔ کدچ، فایل نسخه‌های آزموده‌شده از دامنهٔ نسخه‌های آموزشی جدا شده است. این تفکیک به شما می‌گوید کدام ترکیب واقعاً اجرا شده و کدام فقط دامنهٔ موردنظر است. محیط مجازی را داخل Git قرار ندهید؛ کد و اطلاعات بازسازی محیط را نگه دارید.

خطای نصب با خطای import فرق دارد

نبود wheel مناسب، خطای شبکه، گواهی TLS یا ابزار کامپایل به مرحلهٔ نصب مربوط است. خطای import پس از نصب ممکن است به مسیر، نسخهٔ ناسازگار یا وابستگی بومی مربوط باشد. آخرین خطوط کامل خطا را بخوانید و از خاموش‌کردن بررسی TLS به‌عنوان راه‌حل عمومی استفاده نکنید.

تمرین و گفت‌وگو

یک محیط تازه بسازید و فقط وابستگی‌های یک مثال را نصب کنید. نسخهٔ پایتون، مسیر مفسر و نسخهٔ بسته را ثبت کنید. برای سؤال در دیدگاه، همین سه مورد و متن خطا معمولاً از تصویر کل صفحه مفیدترند.

منابع و ادامهٔ یادگیری

این آموزش بر پایهٔ پایتون مقدماتی ۲ آکادمی کدچ، فصل‌های ۱۸ و ۲۰: مدیریت بسته و محیط مجازی، و مثال‌های بازنویسی‌شده برای این مقاله تدوین شده است.

برای ادامهٔ تمرین، دوره‌های آموزش پایتون آکادمی کدچ را ببینید. در بخش دیدگاه همین مقاله می‌توانید پرسش و نمونهٔ کوچک کد خود را مطرح کنید.

گفت‌وگو دربارهٔ این مطلب

هنوز دیدگاهی منتشر نشده است.

برای ثبت دیدگاه وارد حساب کاربری شوید.