بسیاری از شما ممکن است در مورد محیطهای مجازی (Virtual Environments) در پایتون شنیده باشید. در این مقاله به توضیح نحوهی عملکرد و همچنین دلیل استفاده از آن میپردازیم. همچنین با مشاهده ویدئوی پایین صفحه میتوانید با نحوهی نصب و استفاده از محیط مجازی آشنا شوید.
بسیاری از زبانهای برنامهنوسی (از جمله پایتون) روش خاص خود را در نحوهی نصب و نگهداری کتابخانههای مختلف دارند. برای مثال، در پایتون مکانهای مختلفی برای نگهداری از پکیجها وجود دارد. پکیجهای سیستمی معمولا در یک زیردایرکتوری (child directory) از مسیر ذخیره شده در sys.prefix قرار میگیرند. sys.prefix در واقع محل نصب مفسر پایتون را به شما نشان میدهد.
import sys sys.prefix output: 'D:\\Programs\\python3.6'
اما به طور معمول ما از پکیجها و کتابخانههای دیگری نیز در پروژه خود استفاده میکنیم. برای نصب این پکیجها و کتابخانهها در پایتون از روش easy_instaa یا pip استفاده میشود. کتابخانهها و پکیجهای نصب شده از این طریق با عنوان site package شناخته میشود و محل نصب آنها را با استفاده از کد زیر میتوان به دست آورد. این کد لیستی از مسیرهای مکانهای مختلفی که site packageها در آن ذخیره میشوند را به شما نشان میدهد.
چرا به محیط مجازی نیاز داریم؟
import site print(site.getsitepackages()) output: ['D:\\Programs\\python3.6', 'D:\\Programs\\python3.6\\lib\\site-packages']
هر پروژهای که شما ایجاد میکنید، از همین دایرکتوریها به عنوان مرجع پکیجهای خود استفاده میکند. این موضوع برای پکیجهای سیستمی چندان مشکلزا نیست. اما برای site packageها ایجاد مشکل خواهد کرد.
برای مثال، فرض کنید پروژهی A و پروژهی B هر دو از پکیج X استفاده میکنند. اما نسخهی مورد نیاز پروژهی A از این پکیج 1.0.0 و نسخهی مورد نیاز پروژه B از این پکیج 2.0.0 است. در این صورت، به دلیل نگاه کردن هر دو پروژهی A و B به یک دایرکتوری برای استفاده از این پکیج، کد یکی از پروژهها قطعا از کار خواهد افتاد چرا که پایتون هر پکیجی را تنها با استفاده از نام و بدون نام نسخه آن ذخیره میکند. بدین ترتیبی هیچ تفاوتی میان نسخه 1.0.0 و 2.0.0 قایل نمیشود.
برای حل این مشکل باید به محیط مجازی متوسل شویم.
محیط مجازی چیست؟

قبل از اینکه تعریفی رسمی از محیط مجازی ارایه دهیم، بیایید هدف آن را بررسی کنیم. هدف محیط مجازی ایجاد یک محیط ایزوله برای هر پروژه است به طوری که نیازمندیهای هر پروژه از سایر پروژهها جدا باشد. بدین ترتیب، محیط ذخیرهسازی و مدیریت پکیجهای مورد نیاز هر پروژه از سایر پروژهها جدا خواهد شد. درست مثل این است که در قسمتی از حافظه، پرچینی بکشید و نسخه از پایتون و پکیجهای مورد نظرتان را در آنجا قرار دهید. این پرچین و محتویات داخل آن از یک پروژه به پروژه دیگر متفاوت خواهد بود و هر پروژه تنها به محتویات پرچین خود نگاه کرد.
چطور از محیط مجازی استفاده کنیم؟
برای ایجاد محیط مجازی و استفاده از آن دو روش وجود دارد؛ استفاده از ابزار virtualenv و یا استفاده از ابزار venv. این دو ابزار در ظاهر بسیار شبیه هم عمل میکنند اما تفاوتهای بنیادینی با هم دارند.
تفاوت اول در این است که venv از نسخه 3 پایتون به طورت استاندارد در پکیجهای پایتون وجود دارد و نیازی به نصب ندارد. اما virtualenv به نصب نیاز دارد.
تفاوت دوم نیز در آن است که virtualenv جهت ایجاد محیط ایزوله مجبور به کپی کردن باینریهای مفسر پایتون به صورت کامل در درون محیط مجازی است. اما venv تنها از یک فایل configuration استفاده میکند. این فایل توسط باینری پایتون در محل اصلیش خوانده میشود و نیازی به کپی کردن کل باینری پایتون به محیط مجازی نیست. علاوه بر این، استفاده از venv به دلیل موجود بودن در ساختار استاندارد پایتون، اشکالات احتمالی کمتری به دنبال خواهد داشت و توصیه میشود.