پایتونیک - معرفی Virtual Environment‌ها قسمت دوم

مقدمهخُب، توی پُست قبلی به معرفی مفهوم Virtual environment‌ و همچنین ابزار virtualenv پرداختیم. توی این پست می‌خواهیم بریم یکی دیگه از این ابزارها که گفتیم خیلی حرفه‌ای تر هست، رو خدمت شما معرفی کنیم.اسم این ابزار virtualenvwrapper هست. همون‌طور که از اسمش پیداس درحقیقت یک wrapper (رَپِر معمولاً به ابزاری گفته میشه که اومده تا کار با چیزه دیگه رو راحت‌تر کنه) برای virtualenv هست. یعنی قرار هست با این ابزار کار با virtualenv خیلی خیلی راحت‌تر از قبل بشه. اما مگه virtualenv چه ویژگی‌های بدی داشت که باعث میشد کار باهاش سخت بشه؟معایب virtualenvاگر خاطرتون باشه توی مطلب قبلی گفتیم هرموقع می‌خواید با ابزار virtualenv یک virtual environment بسازید کافیه داخلِ دایرکتوری پروژتون برید و دستور اولیه اون رو بزنید یه چیزی شبیه پایین:‌cd My_Project virtualenv venv ae # or source venv/bin/activate و گفتیم این یک دایرکتوری کنار فایل‌های دیگه‌تون میسازه. عیب این کار موقعی معلوم میشه که شما از یک ورژن کنترلر (گیت و دیگر دوستان) استفاده بکنید. اون وقت برای اینکه ورژن کنترلرتون هی به دایرکتوری venv گیر نده باید توی یک فایل .gitignore بهش بگید با این دایرکتوری کاری نداشته باش. یا اینکه بعضی اوقات حواستون نیست این دایرکتوری محترم رو جایی آپلود می‌کنید(مثلا روی گیت‌هاب). در حقیقت انگار یه چیزایی که اصلا نباید اونجا باشن،‌کنار فایل‌های پروژتون قرار گرفتن.یکی دیگه از کارهای سخت اینه که هر سری هی باید برید داخل دایرکتوری مورد نظر بهش بگید فعال شو یا غیر فعال شو (activate & deactivate)من هرچی راجعبه بدی‌های virtualenv بگم انگار دارم مزیت‌های virtualenvwrapper رو می‌گم، خب چه کاریه مستقیم برم سراغ خودش،نه!آشنایی با virtualenvwrapperاول میریم سراغ نصبش: میگیم پیپ پکیج virtualenvwrapper رو به صورت system-wide برای ما نصب کن: sudo -H pip install virtualenvwrapperپکیج virtualenvwrapper برخلاف برنامه قبلی،‌ کار خیلی خوبی که می‌کنه اینه تمام virtual environment هارو توی یک دایرکتوری که ما بهش می‌گیم کجاست ذخیره می‌کنه و این یعنی جداسازی کد‌ها و پکیج‌های پایتونی که نصب می‌کنیم و باعث میشه دیگه مشکلاتی که بالا گفتم رخ نده.خب برای ادامه کار،‌ دو تا دستور پایین رو توی فایل bashrc. یا zshrc. یا کانفیگ هر شِلِ دیگه‌ای که استفاده می‌کنید بذارید:# virtualenvwrapper configurationexport WORKON_HOME=$HOME/.virtualenvs # Save all virtual environment in this pathsource /usr/local/bin/virtualenvwrapper.sh # Activate it please دستور اول داره میگه که تمام virtual environment‌های مارو توی دایرکتوری virtualenvs. ذخیره کن و دستور بعدی باعث میشه که virtualenvwrapper فعال بشه(واسه اینکه این تنظیمات اجرا باشه باید یکبار ترمینالتون رو باز بسته کنید یا کانفیگ فایلتون رو reload کنید).اما بریم استفاده از اونالان اگه همه چیز رو بدرستی نصب و اجرا کرده باشید،‌ یک سری کامند‌های جدید به سیستمتون اضافه شده که اونا در حقیقت قابلیت‌های باحال virtualenvwrapper حساب می‌شن.دستور mkvirtualenv: با این دستور می‌تونید یک virtual environment جدید بسازید و خودش اون رو هم برای شما فعال می‌کنه.مثالmkvirtualenv my_first_venvهر موقع هم خواستید غیرفعالش کنید،‌ کافیه بگیر غیرفعال شو: ‌deactivate.دستور workon: با این دستور می‌تونید هر موقع خواستید بین virtual environmentهاتون جابجا بشید. اگه این دستور رو بدون هیچ گونه پارامتری بزنید کل virtual environmentهاتون رو نشون میده. اگه بعدش اسم virtual environment‌ای رو بزنید به اون سوئیچ می‌کنه. مثال:workon # this will print all available virtual environworkon my_first_venv # switch to this virtual environmentدستور rmvirtualenv: همونطور که از اسمش پیداس با کمک این دستور میشه یک virtual envrionment رو حذف کرد.یکی از دستوراتی که من خیلی بهش ارادت خاصی دارم mktmpenv هست که برای شما یک virtual environment با یک اسم تصادفی می‌سازه و شما به اون دایرکتوری میبره، اما کجا کمک می‌کنه؟ وقتی میخواید باز یه چیزی رو سریع تست کنید و درگیر انتخاب اسم و این داستانا نشید. وقتی هم غیرفعالش کنید خود به خود پاک میشه!ابزار virtualenvwrapper کامند‌های باحال دیگه هم داره که من دیگه اونارو میذارم به عهده خودتون اینم لینکش.از اینجا کجا برممیشه گفت ما دو تا از بهترین‌ ابزار‌های virtual environment رو توی پایتون گفتیم. یه ابزاری هم هست که خیلی چیز جالبیه و من اون رو میذارم تو قسمت ساخت پکیج توی پایتون میگم. اما اگه خیلی دوس دارید یه آشنایی با اون پیدا کنید به اینجا برید. مثل همیشه اگه این بخش خوشتون اومده حتما این صفحه رو به دوستای خوبتون معرفی کنید.