وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

بعد از انتقال پروژه پایتون خطای bad interpreter می‌بینم؛ محیط مجازی را بازسازی کنیم

آموزش تشخیص مسیر قدیمی venv، بازسازی محیط پایتون پس از انتقال پروژه و تفاوت محیط معمولی با Python App هاست اشتراکی.

انتشار:
توسط تیم فنی نت‌آرام
۶ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله بعد از انتقال پروژه پایتون خطای bad interpreter می‌بینم؛ محیط مجازی را بازسازی کنیم در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
پروژه پایتون را از یک سرور یا پوشه به جای دیگری منتقل کرده‌اید. حالا هنگام اجرای pip یا فرمان برنامه، پیامی مانند bad interpreter یا No such file or directory می‌بینید؛ در حالی که فایل فرمان در پوشه جدید وجود دارد. یکی از علت‌های رایج این است که محیط مجازی همراه پروژه کپی شده، اما بعضی اسکریپت‌های داخل آن هنوز به مسیر مفسر قبلی اشاره می‌کنند.
محیط مجازی معمولاً یک پوشه قابل جابه‌جایی مستقل نیست. راه قابل اطمینان، ساخت محیط تازه در مقصد و نصب وابستگی‌های تأییدشده پروژه در آن است. در ادامه ابتدا مشکل را تشخیص می‌دهیم و سپس برای دو حالت «محیط معمولی» و «محیط مدیریت‌شده در پنل هاست» روش مناسب را اجرا می‌کنیم. نسخه قبلی را تا پایان آزمایش نگه دارید.

۱. مسیر قدیمی را در متن خطا پیدا کنید

پیام ممکن است شبیه نمونه زیر باشد:
کد / دستورbad interpreter: /old/path/project/.venv/bin/python: no such file or directory
آدرس نمونه را با پیام خودتان مقایسه کنید. اگر خطا به مسیر قبلی اشاره می‌کند، جابه‌جایی محیط سرنخ خوبی است. اگر پیام درباره نبودن فایل برنامه، دسترسی اجرایی یا فرمت ناسازگار سیستم‌عامل باشد، علت می‌تواند چیز دیگری باشد. محیطی که از Windows به Linux منتقل شده نیز قابل استفاده فرض نمی‌شود؛ مفسر و فایل‌های بومی آن‌ها با هم فرق دارند.
در ترمینال مقصد، به پوشه واقعی پروژه بروید و فایل‌ها را ببینید:
کد / دستورcd ~/myproject pwd ls -la
مسیر ~/myproject فقط نمونه است. فایل تنظیمات و نیازمندی‌های همین پروژه را پیدا کنید و مطمئن شوید در پوشه اشتباهی کار نمی‌کنید. اگر برنامه روی هاست است، Application root را از پنل همان برنامه بردارید.

۲. مفسر و خط اول اسکریپت را ببینید

فرض کنیم پوشه محیط قدیمی در پروژه .venv نام دارد. این دستور خط اول اسکریپت pip آن را نشان می‌دهد:
کد / دستورhead -n 1 .venv/bin/pip
در لینوکس، خطی که با #! شروع می‌شود می‌تواند مسیر مطلق مفسر را نگه دارد. اگر آن مسیر به محل قدیمی اشاره کند، اجرای اسکریپت در مسیر جدید ممکن است شکست بخورد. نام پوشه شما می‌تواند متفاوت باشد. نبودن فایل bin/pip نیز به‌تنهایی ثابت نمی‌کند محیط سالم است؛ ممکن است ناقص منتقل شده یا ساختار آن متعلق به سیستم دیگری باشد.
نسخه Python موجود و مسیر آن را نیز بررسی کنید:
کد / دستورcommand -v python3 python3 --version
در هاست اشتراکی، نسخه‌ای که پنل برای برنامه می‌سازد لزوماً با python3 عمومی پوسته یکی نیست. نسخه سازگار را از تنظیمات سرویس و نیاز پروژه مشخص کنید. از تغییر دستی ده‌ها خط shebang یا پیوندزدن مسیر قدیمی به مقصد تازه برای پنهان‌کردن خطا خودداری کنید؛ فایل‌های دیگر محیط هم ممکن است به مسیر قبلی وابسته باشند.

۳. وابستگی‌های پروژه را آماده کنید

فایل requirements.txt یا روش تعریف وابستگی مورد تأیید پروژه را پیدا کنید:
کد / دستورls -la requirements.txt
اگر فایل وجود ندارد، از مخزن یا توسعه‌دهنده فهرست دقیق و آزموده‌شده را بگیرید. نصب تازه‌ترین نسخه همه کتابخانه‌ها بدون هماهنگی ممکن است برنامه را بشکند. اگر قبلاً فهرستی از محیط سالم تهیه می‌کنید، آن را بازبینی کنید؛ آدرس‌های مخزن خصوصی یا اطلاعات محرمانه احتمالی نباید عمومی شوند. همچنین وجود فایل نیازمندی به‌تنهایی تضمین نمی‌کند همه کتابخانه‌های سیستمی و معماری دو سرور سازگارند.

۴. برای محیط معمولی، یک محیط جدید کنار قبلی بسازید

این بخش برای پروژه‌ای است که مدیر آن خودش محیط مجازی را مدیریت می‌کند؛ نه برای جایگزین‌کردن دستی محیط ساخته‌شده توسط پنل Python Selector. پس از انتخاب نسخه Python سازگار، در یک نسخه آزمایشی پروژه می‌توانید محیطی با نام تازه بسازید:
کد / دستورpython3 -m venv .venv-new .venv-new/bin/python --version .venv-new/bin/python -m pip --version
اگر پوشه .venv-new از قبل وجود دارد، نام تازه‌ای انتخاب کنید؛ محیط قبلی را رونویسی نکنید. فرمان اول محیط جدید می‌سازد و دو فرمان بعد نسخه مفسر و pip همان محیط را نشان می‌دهند. اگر ماژول venv موجود نیست، روش نصب بسته مربوط به توزیع و مجوز سرور را با مدیر سیستم بررسی کنید؛ روی هاست اشتراکی از نصب سیستمی با sudo استفاده نکنید.
اکنون در نسخه آزمایشی و پس از تأیید فایل وابستگی، بسته‌ها را نصب و بررسی کنید:
کد / دستور.venv-new/bin/python -m pip install -r requirements.txt .venv-new/bin/python -m pip check
نصب می‌تواند از مخزن شبکه دریافت کند و اسکریپت‌های بسته‌ها را اجرا کند؛ منبع باید قابل اعتماد باشد. pip check ناسازگاری‌های شناخته‌شده را نشان می‌دهد، اما تست کامل برنامه نیست. فرمان import کتابخانه‌های اصلی و آزمون‌های واقعی پروژه را نیز با همین مفسر اجرا کنید. اگر پیامی درباره نسخه ناسازگار یا بسته پیدانشده می‌بینید، راهنمای خطای No matching distribution کمک می‌کند.

۵. برای هاست دارای پنل، محیط را از همان پنل بسازید

در cPanel، صفحه Setup Python App یا بخش معادل را باز کنید. مسیر برنامه، نسخه پایتون و فرمان فعال‌سازی را از تنظیمات واقعی سرویس بگیرید. اگر نیاز به محیط تازه دارید، روش پشتیبانی‌شده پنل یا ساخت یک برنامه آزمایشی جدا با مسیر و آدرس آزمایشی را به کار ببرید؛ حذف و ساخت دوباره برنامه فعال ممکن است تنظیمات و دسترسی کاربران را قطع کند.
کد و فایل وابستگی تأییدشده را به محل آزمایشی منتقل کنید، وارد محیطی شوید که همان برنامه آزمایشی معرفی می‌کند و نصب را با python -m pip install -r requirements.txt انجام دهید. سپس نسخه مفسر، لاگ و عملکرد برنامه آزمایشی را ببینید. برای جابه‌جایی نهایی دامنه یا مسیر، از روشی استفاده کنید که پنل و ارائه‌دهنده سرویس واقعاً پشتیبانی می‌کنند و مسیر بازگشت به برنامه قبلی را حفظ کنید.

۶. اجرا، زمان‌بندی و مسیرهای وابسته را اصلاح کنید

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

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام