محتوای آموزشی وبلاگ نتآرام
برنامه پایتون را به هاست منتقل کردهاید و در گزارش خطا عبارت
ModuleNotFoundError: No module named ... میبینید. عجیبتر اینکه قبلاً همان بسته را با pip نصب کردهاید. در بسیاری از موارد، بسته داخل یک محیط پایتون نصب شده اما برنامه از محیط دیگری استفاده میکند. گاهی هم نامی که با pip نصب میشود با نامی که در کد import میکنید فرق دارد، یا اصلاً فایل داخلی پروژه روی هاست وجود ندارد.در این راهنما ابتدا از روی نام خطا، پکیج بیرونی را از فایل داخلی جدا میکنیم. بعد مسیر مفسر، نصب وابستگی و نتیجه اجرای برنامه را بررسی میکنیم. مثالها برای هاست پایتون لینوکسی و برنامهای با محیط مجازی نوشته شدهاند؛ مسیرها و نام دکمهها در سرویس شما میتوانند فرق داشته باشند.
۱. نام دقیق ماژول و محل خطا را یادداشت کنید
در پنل برنامه پایتون یا گزارش خطای آن، آخرین خط کامل خطا را ببینید. برای نمونه:
کد / دستورModuleNotFoundError: No module named 'dotenv'
این پیام میگوید مفسر اجراکننده نتوانسته ماژول
dotenv را پیدا کند؛ نمیگوید حتماً بستهای با همین نام باید از اینترنت نصب شود. چند خط بالاتر، نام فایل و خطی که import انجام داده را هم ببینید. اگر نامی مثل myproject.settings یا app.routes متعلق به پروژه خودتان است، ابتدا نبود فایل پروژه، اشتباه مسیر و تفاوت حروف بزرگ و کوچک را بررسی کنید. اگر ماژول از یک بسته بیرونی است، وارد مرحله محیط مجازی شوید.خطا را با رمزها، توکنها یا محتوای خصوصی منتشر نکنید. اگر فقط صفحه ۵۰۰ میبینید و گزارش مشخصی ندارید، ابتدا مسیر لاگ برنامه را در پنل یا از ارائهدهنده بیابید؛ نصب تصادفی چند بسته میتواند مشکل را پیچیدهتر کند. زمان وقوع خطا را یادداشت کنید تا گزارش همان درخواست را پیدا کنید.
۲. از محیط درست برنامه استفاده کنید
در cPanel قسمت Setup Python App یا بخش مشابه برنامه را باز کنید. مسیر برنامه، نسخه پایتون و فرمان فعالسازی محیط مجازی را از همان پنل بردارید. اگر Terminal حساب فعال است، آن فرمان اختصاصی را اجرا کنید. مسیر زیر فقط نشان میدهد ظاهر یک فرمان ممکن است چگونه باشد؛ آن را عیناً برای حساب خودتان استفاده نکنید:
کد / دستورsource /home/USER/virtualenv/myproject/3.12/bin/activate
اکنون مفسر و pip وابسته به همان مفسر را ببینید:
کد / دستورwhich python
python --version
python -c 'import sys; print(sys.executable); print(sys.prefix); print(sys.base_prefix)'
python -m pip --version
دو فرمان اول مسیر و نسخه را نشان میدهند. فرمان سوم مسیر اجرا و دو پیشوند محیط را چاپ میکند؛ در یک محیط مجازی معمولاً
sys.prefix با sys.base_prefix تفاوت دارد. خط آخر محل pip مربوط به همین Python را نشان میدهد. در بعضی پوستهها which در دسترس نیست و میتوانید command -v python را امتحان کنید.اگر بهجای فرمان پنل، به محیط سیستم یا محیط برنامه دیگری وارد شدهاید، از همان فرمان اختصاصی برنامه درست استفاده کنید. تغییر نسخه در پنل ممکن است به ساخت یا انتخاب یک محیط دیگر منجر شود؛ از نصب بودن بسته در محیط قبلی نتیجه نگیرید که در محیط جدید هم نصب است. روی هاست اشتراکی از
sudo pip install استفاده نکنید.۳. نام بسته نصبشده را از نام import جدا کنید
در نمونه
کد / دستورdotenv، توزیع رایج روی PyPI با نام python-dotenv نصب میشود. برای بررسی آن در محیط فعال:python -m pip show python-dotenv
python -c 'import importlib.util; print(importlib.util.find_spec("dotenv"))'
اگر فرمان اول اطلاعات بسته و محل نصب آن را نشان میدهد ولی دومی
None برمیگرداند، احتمال محیط اشتباه یا نصب ناسالم وجود دارد. اگر اولی میگوید بسته پیدا نشد، در همین محیط نصب نیست. نامهای بالا نمونه هستند؛ برای خطای خود، نام دقیق توزیع و ماژول را از مستندات رسمی همان بسته پیدا کنید. مثال دیگر تفاوت نام بسته Pillow و نام import آن یعنی PIL است. از نصب بستههای همنام ناشناخته صرفاً برای پاکشدن خطا خودداری کنید.برای نمونهبرداری از وابستگیهای شناختهشده پروژه، به پوشه دارای فایل نیازمندی بروید:
کد / دستورcd ~/myproject
pwd
ls -la requirements.txt
مسیر فرضی را با مسیر واقعی جایگزین کنید. اگر فایل وجود ندارد، از توسعهدهنده یا مخزن پروژه فهرست نسخههای مورد تأیید را بگیرید. ساختن یک فهرست تصادفی از بستههای نصبشده روی هاست میتواند نسخههای ناسازگار وارد پروژه کند.
۴. وابستگی تأییدشده را در همان محیط نصب کنید
اگر فایل
کد / دستورrequirements.txt متعلق به همین نسخه برنامه است و تغییر آن را بررسی کردهاید، فرمان زیر بستههای فهرستشده را در محیط پایتون فعال نصب میکند:python -m pip install -r requirements.txt
قبل از اجرا مطمئن شوید فضای حساب کافی است و فهرست از منبع مورد اعتماد آمده است. نسخهپینها، مخازن خصوصی و وابستگیهای بومی پروژه اهمیت دارند؛ نصب نسخه جدید دلخواه ممکن است برنامه را بشکند. اگر نصب شکست خورد، متن خطا را جداگانه بخوانید: خطای شبکه، نبود نسخه سازگار یا نیاز به ابزار ساخت، پاسخهای متفاوت دارند. برای اطمینان نسبی از سازگاری وابستگیهای نصبشده، بعد از نصب اجرا کنید:
کد / دستورpython -m pip check
python -c 'import dotenv; print("import succeeded")'
فرمان دوم فقط نمونه
dotenv را میآزماید؛ آن را با ماژول واقعی خود و مطابق مستنداتش جایگزین کنید. پیام موفقیت یعنی import در همین ترمینال کار کرده است، نه اینکه حتماً برنامه وب از همین محیط استفاده میکند. pip check نیز همه خطاهای اجرای برنامه را پیدا نمیکند.۵. اگر ماژول بخشی از پروژه خودتان است
اگر خطا به ماژول داخلی اشاره دارد، از مسیر برنامه فایلها را ببینید. برای مثال اگر کد
کد / دستورfrom app import routes دارد:pwd
ls -la
ls -la app
نام پوشه و فایلهای واقعی را با import مقایسه کنید. لینوکس به بزرگی و کوچکی حروف حساس است؛
App و app دو نام متفاوتاند. مطمئن شوید همه فایلها از رایانه یا مخزن به هاست منتقل شدهاند و فرمان شروع برنامه از پوشه درست استفاده میکند. بعضی پروژهها برای قابلشناساییشدن ماژول به نصب خود پروژه در محیط یا ساختار بسته مشخص نیاز دارند؛ روش را از فایلهای ساخت و راهنمای همان پروژه بخوانید. تغییر گسترده PYTHONPATH بدون فهم مسیر میتواند ماژول اشتباه را بارگذاری کند.۶. برنامه وب را دوباره راهاندازی و آزمون کنید
بعد از نصب یا اصلاح فایلها، در پنل همان برنامه دکمه Restart را بزنید. صفحه یا API مشکلدار را دوباره باز کنید و گزارش جدید را با زمان همان درخواست مقایسه کنید. اگر خطا هنوز همان ماژول را نشان میدهد، نام محیط و مسیر Application root پنل را با مسیر ترمینال مقایسه کنید. ممکن است برنامه دیگری را Restart کرده باشید یا تنظیم راهانداز از مفسر متفاوتی استفاده کند.
اگر خطا به ماژول دیگری تغییر کرد، متن جدید را جداگانه بررسی کنید؛ رفع خطای اول لزوماً به معنی نصب همه وابستگیها نیست. برای بررسی اینکه هاست اشتراکی با نیاز برنامه شما سازگار است، صفحه هاست پایتون نتآرام و راهنمای نیازهای Worker برنامه پایتون را ببینید. جزئیات محیط مجازی و مسیر مفسر در مستندات رسمی Python venv آمده است.
اشتراکگذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله بعدی
دیدگاهها (۰)
دیدگاههای تاییدشده و پاسخهای تیم نتآرام
