به صورت پیش فرض وقتی شما یک پکیج پایتون رو با پکیجمنیجر Pip (بخونید پیپ) نصب میکنید، این پکیجها توی مسیرهای پیش فرض نصب میشن
یعنی چی؟ یعنی وقتی شما یک ماژول رو توی پایتون import میکنید، پایتون شروع میکنه توی این مسیرها دنبال اون ماژول میگرده و اگه اون رو نتونه پیدا کنه خطا بر میگردونه!
جواب اینه بخاطر تمیزکاری. در حقیقت فرض کنید شما دارید روی چندین پروژه کار میکنید و هر کدوم از این پروژهها نسخهی مختلفی از یک ماژول رو نیاز دارند. مثلاً یک پروژهی قدیمی جنگو دارید و همزمان یک پروژهی جدید رو استارت زدید. یا مثلاً خیلی از مواقع شما فقط میخواید یک ماژول تست کنید، دلیلی نداره این ماژول به صورت مستقیم کل سیستم رو درگیر کنه، بعضی مواقع هم ممکنه به دلایل امنیتی نخواید یک پکیج رو به صورت system-wide نصب کنید یا اصلا ممکنه حق دسترسی لازم رو نداشته باشید!
کاری که virtual environmentها میکنن اینه که یک کپی کامل از فایلهای باینری لازم برای اجرا برنامه پایتون و همچنین خود پکیجمنیجر پیپ میسازه و از این به بعد تمام ماژول ها از مسیر جدید خونده و نوشته میشن.به همین خاطر میگن virtual environment یک ابزار مدیریت پیشنیازها هست.
? طریقه نصب Virtual Environment
دستور زیر را در cmd وارد کنید:
pip install virtualenv
خُب، حالا فرض کنیم، یک دایرکتوری داریم به اسم my_Project و اونجا داریم روی یک پروژه کار میکنیم، داخل دایرکتوری مورد نظر میریم(چطوری؟) و به virtualenv میگیم که از این بعد تمام پکیجها تو این مسیر نصب شن و دیگه کاری با جاهای دیگه نداشته باش:
cd my_project virtualenv venv
دستور virtualenv یک پارامتر به عنوان ورودی میخواد، که در حقیقت یک دایرکتوری با اون اسم میسازه و تمام فایلهای موردنیاز برای اینکه بتونه کارهاشو انجام بده داخل اون میسازه. خیلی مرسومه که این اسم رو معمولا همهجا venv میذاریم(الان باید یک پوشه با نام venv درون پوشه my_project ساخته شده باشد)
بعد از اینکه دستور virtualenv venv رو اجرا کردید، یک کار دیگه باید بکنید و اون فعال سازی این virtual environment هست. برای اینکار کافیه دستور پایین رو بزنید:
venv\Scripts\activate
پس، برای هر پروژه ای که دارید کافیه داخل پروژه یکبار به virtualenv بگید کارهای لازمه رو انجام بده و هرباری که داخل دایرکتوری مورد نظر میرید بهش بگید،اون رو براتون فعال کنه!
اما چطور غیرفعالش کنم تا بتونم با پایتون system-wide ام کار کنم؟ به راحتی کافیه دستور پایین رو اجرا کنید:
deactivate
در نهایت، هر وقت هر پروژه ای رو شروع میکنید یا اگر میخواهید یک ماژول رو تست کنید فراموش نکنید حتماً از virtualenv استفاده کنید.
متن اصلی:
https://virgool.io/Software/virtual-environtment-part1-ak29fabeelou
منابع:
https://python-guide-es.readthedocs.io/es/guide-es/dev/virtualenvs.html