در دنیای برنامهنویسی با پایتون، یکی از چالشهایی که خیلی از توسعهدهندگان با آن روبهرو میشوند، مدیریت وابستگیها (Dependencies) و پکیجهای مورد نیاز هر پروژه است. ممکن است یک پروژه با نسخهای خاص از یک کتابخانه درست کار کند، در حالی که پروژه دیگر به یک نسخه متفاوت از همان کتابخانه نیاز داشته باشد. نصب همه این کتابخانهها روی یک محیط مشترک میتواند باعث ایجاد تداخل، باگ و سردرگمی شود. اینجاست که مفهوم محیط مجازی یا همان (Virtual Environment) وارد صحنه میشود و مثل یک ناجی برای حل این مشکل عمل میکند.
محیط مجازی به شما کمک میکند که برای هر پروژه یک فضای مستقل ایجاد کنید تا پکیجها، نسخههای آنها و تنظیمات مربوط به پروژه فقط در همان فضا اعمال شوند و به باقی سیستم کاری نداشته باشند. یکی از ابزارهای رایج و پرکاربرد برای ساخت محیط مجازی در پایتون، Virtualenv است که در این مقاله از بلاگ آسا، به بررسی و نحوه کارکرد آن میپردازیم.
Virtualenv چیست؟

Virtualenv یک ابزار قدرتمند برای ایجاد محیطهای مجازی در پایتون است. این ابزار به شما اجازه میدهد تا برای هر پروژه، یک محیط مستقل با نسخه خاصی از پایتون و کتابخانههای مورد نیازش بسازید. به این ترتیب، بدون اینکه کتابخانهها یا تنظیمات پروژههای دیگر را تغییر بدهید، میتوانید روی پروژه فعلیخودتان با خیال راحت کار کنید.
به زبان ساده، وقتی شما با Virtualenv یک محیط مجازی میسازید، در واقع یه نسخه مجزا از مفسر پایتون و pip (مدیر پکیجها) را در یک پوشه خاص قرار میدهید که فقط در این محیط در دسترس خواهند بود. از آن لحظه به بعد، هر پکیجی که نصب کنید، فقط در همین پوشه قرار میگیرد و کاری به سیستم اصلی شما ندارد.
چرا باید از Virtualenv استفاده کنیم؟

در روند توسعه و تولید نرمافزار با پایتون، مخصوصا زمانی که با پروژههای مختلف کار میکنیم، احتمال این که با نسخههای متفاوتی از کتابخانهها سر و کار داشته باشیم خیلی بالاست. نصب همه این کتابخانهها روی سیستم اصلی یا همان Global Environment میتواند مشکلات زیادی به وجود بیاورد. در ادامه چند دلیل مهم برای استفاده از Virtualenv را با هم بررسی میکنیم:
- جلوگیری از تداخل نسخهها: شما ممکن است در یک پروژه به Django ۲.۲ نیاز داشته باشید و در پروژهای دیگر به Django ۴.۰. نصب همزمان این دو نسخه روی یک سیستم ممکن نیست اما به وسیله Virtualenv بهراحتی میتوانید برای هر پروژه نسخه مناسب خودش را نصب کنید.
- محیط کاری ایزوله: Virtualenv برای هر پروژه یک محیط جداگانه میسازد. این ایزولهسازی کمک میکند تغییرات پروژههای مختلف روی هم بیاثر باشند.
- قابل حمل بودن پروژه: با استفاده از Virtualenv میتوانید فایل requirements.txt تولید کنید که شامل اطلاعات همه پکیجهای نصب شده در آن محیط است. این فایل به شما کمک میکند تا در هر سیستمی فقط با یک دستور محیط پروژه را بازسازی کنید.
- توسعه و تست راحتتر: اگر بخواهید یک نسخه آزمایشی از یک کتابخانه یا فریمورک جدید را تست کنید، Virtualenv این امکان را در اختیارتان قرار میدهد که بدون دستکاری سیستم اصلی، آن نسخه را نصب و بررسی کنید.
چطور Virtualenv را نصب و راهاندازی کنیم؟

راهاندازی Virtualenv بسیار ساده است و تنها با چند دستور انجام میشود. در ادامه مراحل نصب و استفاده از Virtualenv را توضیح میدهیم.
۱- نصب Virtualenv
مجازی ساز Virtualenv بهصورت پیشفرض نصب نیست. اگر هنوز Virtualenv را نصب نکردهاید، ترمینال خود را باز کنید و از دستور زیر استفاده کنید:
|
1 |
pip install virtualenv |
۲. ساخت محیط مجازی
بعد از نصب، به مسیری که میخواهید در آن پروژه خودتان را بسازید بروید و با دستور زیر، یک محیط مجازی بسازید:
|
1 |
virtualenv venv |
در اینجا، venv نام محیط مجازی شماست و یک پوشه با همین نام در مسیر مورد نظر شما ساخته میشود.
۳- فعالسازی محیط مجازی
پس از ساختن محیط مجازی، باید آن را فعال کنید تا بتوانید از این محیط ایزوله استفاده کنید. در ادامه، دستور فعالسازی Virtualenv را در ویندوز و لینوکس و مک میبینیم.
ویندوز:
|
1 |
venv\Scripts\activate |
لینوکس و مک:
|
1 |
source venv/bin/activate |
پس از فعالسازی، خط فرمان شما به این شکل تغییر میکند:
(venv) $
۴- نصب پکیجها
حالا میتوانید هر کتابخانه یا پکیجی که نیاز دارید را نصب کنید. مثلا برای نصب Flask، میتوانید از دستور زیر استفاده کنید:
|
1 |
pip install flask |
۵- مشاهده و ذخیره پکیجهای نصبشده
گاهی ممکن است بخواهید لیست همه پکیجهایی که در محیط مجازی خود نصب کردهاید را ببینید. برای این کار از دستور freeze به شکل زیر استفاده میکنیم:
|
1 |
pip freeze |
با این دستور، یک لیست کامل از پکیجهای نصب شده به همراه نسخه آنها بهشما نمایش داده میشود. به این شکل:
|
1 2 3 4 5 6 7 8 |
blinker==1.9.0 click==8.1.8 colorama==0.4.6 Flask==3.1.0 itsdangerous==2.2.0 Jinja2==3.1.6 MarkupSafe==3.0.2 Werkzeug==3.1.3 |
معمولا هر پروژه دارای یک فایل requirements است که در آن نام کتابخانهها و پیشنیازهای مربوط به آن پروژه ذخیره شده است. حالا برای ذخیره نام پکیجها در فایل requirements.txt، از دستور زیر استفاده میکنیم:
|
1 |
pip freeze > requirements.txt |
برای نصب همه کتابخانههای این فایل هم کافیست دستور زیر را اجرا کنید:
|
1 |
pip install –r requirements.txt |
۶- غیرفعال کردن محیط مجازی
برای این که از محیط مجازی خارج شوید، از دستور زیر استفاده کنید:
|
1 |
deactivate |
نکات حرفهای در استفاده از محیط مجازی

وقتی که با پروژههای واقعی و تیمی کار میکنید، استفاده کردن از محیط مجازی به تنهایی کافی نیست. بهرهگیری درست، اصولی و حرفهای از آن میتواند تاثیر مستقیمی روی کیفیت توسعه، آسانتر شدن فرایند نگهداری و کاهش خطاهای آینده داشته باشد. در این بخش، مجموعهای از نکات و توصیههای کاربردی برای کار با محیطهای مجازی را بررسی میکنیم.
۱- نامگذاری هوشمندانه محیط مجازی
در بیشتر پروژهها، رایجترین اسمها برای دایرکتوری محیط مجازی اسمهایی مثل «venv»، «.venv» یا «env» است. استفاده از اسم «.venv» مزایای خاصی دارد از جمله:
- بهدلیل داشتن پیشوند «.» به صورت پیشفرض در بسیاری از ادیتورها و فایل منیجرها مخفی میشود.
- خیلی راحتتر میتوان آن را در «.gitignore» فیلتر کرد.
- با تنظیمات ادیتورهایی مثل VS Code و PyCharm بهتر هماهنگ میشود (مثلا VS Code بهصورت خودکار محیط «.venv» را تشخیص میدهد).
۲- جلوگیری از انتشار پوشه محیط مجازی در مخزن Git
هیچوقت محیط مجازی را وارد سرویسهای کنترل نسخه مثل Git نکنید. این پوشه حجیم است، مخصوص دستگاه شماست و نباید در مخزن پروژه بارگذاری شود. به جای آن، فایل requirements.txt یا فایل وابستگی مشابه را در مخزن نگه دارید.
میتوانید در فایل «.gitignore» این خط را اضافه کنید:
|
1 |
.venv/ |
۳- استفاده از alias یا اسکریپت برای فعالسازی سریع
در سیستمهایی که زیاد از محیطهای مجازی استفاده میشود، فعالسازی دستی میتواند به مرور خستهکننده شود. تعریف alias یا اسکریپت کوچک میتواند این روند را سادهتر کند.
در لینوکس و مک:
|
1 |
alias activate=”source .venv/bin/activate” |
ویندوز (PowerShell):
|
1 |
function activate { .\.venv\Scripts\activate.ps1 } |
در دستورهای بالا، به جای «.venv» نام پوشه محیط مجازی خودتان را بنویسید. سپس صرفا با وارد کردن دستور activate به جای تایپ دستور کامل، میتوانید محیط مجازی خودتان را فعال کنید.
۴- خودکارسازی ساخت محیط با اسکریپت با Makefile
برای اینکه هر توسعهدهندهای بتواند پروژه را سریع راهاندازی کند، توصیه میشود اسکریپتی برای مراحل زیر ایجاد شود:
- ساخت محیط مجازی (در صورت عدم وجود)
- نصب پکیجها
- فعالسازی محیط
در واقع Makefile یک فایل متنی ساده است که مجموعهای از دستورات خودکارسازی را نگهداری میکند. این فایل معمولا در پروژهها برای سادهتر کردن کارهایی مثل ساخت محیط مجازی، نصب پکیجها، اجرای تستها و غیره استفاده میشود.
برای مثال، برای ساختن یک Makefilee برای پروژه پایتونی، اول باید در ریشه پروژه، یک فایل به اسم Makefile بسازید (بدون پسوند).
سپس دستورات مورد نیاز خودتان را درون فایل بنویسید. مثلا:
|
1 2 3 4 5 6 7 8 |
.PHONY: setup activate clean setup: python –m venv .venv . .venv/bin/activate && pip install –r requirements.txt activate: . .venv/bin/activate |
به وسیله این فایل شما میتوانید دو عمل setup و activate را به سادگی انجام دهید. مثلا دستور setup محیط مجازی venv پایتون را ایجاد میکند و پکیجهای درون فایل requirements.txt را نصب میکند. برای استفاده از دستور setup، کد زیر را در ترمینال بنویسید:
|
1 |
make setup |
۵- استفاده از ابزارهای پیشرفتهتر: pip-tools یا poetry
برای مدیریت بهتر وابستگیها، بهویژه در پروژههای بزرگ، استفاده از ابزارهای زیر را توصیه میکنیم:
- pip-compile: برای تولید فایل requirements.txt دقیق از requirements.in.
- poetry: ابزاری کامل برای مدیریت وابستگیها، نسخهگذاری، ساخت و انتشار پکیجهای پایتون.
۶- هماهنگسازی محیط مجازی با ادیتورها
بیشتر ادیتورها مثل VS Code، قابلیت تشخیص خودکار محیط مجازی را دارند. ولی در صورت نیاز میتوانید بهصورت دستی مسیر محیط مجازی را به ادیتور معرفی کنید تا تکمیل کد، listing و اجرا به درستی کار کند.
مثلا در VS Code باید فایل «.vscode/setting.json» را ادیت کنید:
|
1 2 3 |
{ “python.pythonPath”: “.venv/bin/python” } |
۷- ذخیرهسازی نسخه پایتون در فایل «.python-version»
اگر پروژهای دارید که باید با نسخه مشخصی از پایتون اجرا شود (مثلا ۳.۱۰.۴)، ابزارهایی مثل pyenv از فایل «.python-version» پشتیبانی میکنند. این باعث میشود هنگام ورود به پوشه پروژه، نسخه صحیح از پایتون بهصورت خودکار فعال شود.
فرق Virtualenv و venv چیست؟

پایتون از نسخه 3.3 به بعد، یک ابزار داخلی به نام venv ارائه کرده که عملکردی مشابه Virtualenv دارد. اما تفاوتهایی میان این دو دیده میشود که در جدول زیر با هم بررسی میکنیم:
| ویژگی | Virtualenv | Venv |
| درونساخت در پایتون | باید نصب شود | از نسخه ۳.۳ به بعد در پایتون وجود دارد |
| بهروزرسانی | قابل بهروزرسانی با pip | فقط با بهروزرسانی پایتون |
| پشتیبانی از چند نسخه پایتون | دارد | ندارد |
| سرعت | سریعتر | کمی کندتر |
| توسعهپذیری | دارد | ندارد |
| تعریف بدون ساخت (API) | دارد | ندارد |
سخن آخر
محیطهای مجازی در پایتون ابزاری مهم برای جداسازی وابستگیهای پروژهها و جلوگیری از تداخل نسخهها هستند. ابزارهای venv و virtualenv هر دو این امکان را فراهم میکنند ولی تفاوتهایی در امکانات، سرعت و قابلیت گسترش دارند که میتوانید بر اساس نیاز پروژه مد نظرتان، این دو را انتخاب کنید.
استفاده از فایل requirements.txt برای مدیریت پکیجها و بازتولید محیطها اهمیت بالایی دارد و بهویژه در کار تیمی و استقرار پروژهها ضروری است. همچنین، ابزارهایی مثل Makefile میتوانند فرایندهای تکراری مثل ساخت محیط، نصب وابستگیها و فعالسازی محیط را خودکار کرده و توسعه را سادهتر و حرفهایتر کنند.
در نهایت، استفاده از محیط مجازی بهتنهایی کافی نیست؛ بلکه رعایت اصول حرفهای در مدیریت کردن آن، از جمله استفاده از ابزارهای کمکی و نگهداری درست و ساختاریافته وابستگیها، نقشی مهم و کلیدی در موفقیت و پایداری پروژههای پایتونی شما ایفا میکند.
منابع
umeshsl.medium.com | dev.to | caktusgroup.com | earthly.dev | python-poetry.org
سوالات متداول
خیر، مفهوم محیط مجازی در زبانهای مختلفی وجود دارد. با این حال، در پایتون بسیار رایج و پراستفاده است.
استفاده از محیط مجازی باعث جلوگیری از تداخل نسخههای کتابخانهها بین پروژههای مختلف میشود و مدیریت وابستگیها را سادهتر میکند.
venv یک ماژول داخلی در پایتون از نسخه 3.3 به بعد است، در حالی که virtualenv یک ابزار خارجی است که حتی در نسخههای قدیمیتر هم قابل استفاده است. هر دو کار مشابهی انجام میدهند اما virtualenv امکانات بیشتری دارد.


دیدگاهتان را بنویسید