فهرست مطالب
وقتی روی دو پروژه مختلف پایتون کار میکنید، خیلی زود با بحران نسخهها روبهرو میشوید. فرض کنید یک برنامه با نسخه قدیمی یک کتابخانه کار میکند و پروژه جدید شما به امکانات نسخه تازه همان بسته نیاز دارد. اگر بستهها را به شکل سراسری با دستور pip install روی سیستم نصب کنید، ارتقای بسته در یک پروژه باعث شکستن کدهای پروژه دیگر میشود. ماژول رسمی venv دقیقاً برای پایان دادن به این بینظمی ساخته شده است.
محیط مجازی چیست و مستندات رسمی پایتون چه میگوید
طبق مستندات رسمی پایتون، ماژول venv که از پایتون ۳.۳ به کتابخانه استاندارد اضافه شد، امکان ایجاد محیطهای مجزای پایتون را فراهم میکند. هر محیط مجازی مفسر، اسکریپتها و پوشه site-packages مستقل خود را دارد. بستههایی که با ابزار pip درون یک محیط نصب میشوند، به همان پوشه محدود میمانند و پایتون اصلی سیستم یا پروژههای دیگر را تغییر نمیدهند.
مستندات پایتون چند ویژگی مهم را برای محیطهای مجازی مشخص میکند:
- محیط مجازی مصرفشدنی و یکبارمصرف است؛ یعنی اگر مشکلی پیش آمد، میتوانید آن را کامل حذف و دوباره در چند ثانیه بسازید.
- محیط مجازی قابل جابهجایی نیست؛ نمیتوانید پوشه محیط را به مسیر دیگری کپی کنید، چون مسیرهای فایل اجرایی پایتون در فایلهای پیکربندی آن ثبت میشوند.
- کدهای اصلی پروژه نباید داخل پوشه محیط مجازی ذخیره شوند.
ساخت و فعالسازی محیط مجازی گامبهگام
برای ساخت محیط مجازی نیازی به نصب هیچ ابزار اضافی ندارید. کافی است وارد مسیر پوشه پروژه خود شوید و مفسر پایتون را با فلگ -m venv صدا بزنید. نام پوشه محیط مجازی را طبق عرف عمومی .venv یا venv میگذارند:
bash# رفتن به پوشه پروژه
cd my_project
# ساخت محیط مجازی در پوشهای به نام .venv
python -m venv .venv
با اجرای این دستور، پایتون ساختاری شامل فایلهای اجرایی در پوشه bin (یا Scripts در ویندوز) و فایلی به نام pyvenv.cfg میسازد. برای استفاده از این محیط، باید آن را فعال کنید. روش فعالسازی بر اساس سیستمعامل متفاوت است:
در لینوکس و مکاواس (شِل bash یا zsh):
bashsource .venv/bin/activate
در ویندوز (PowerShell):
powershell.venv\Scripts\Activate.ps1
اگر در پاورشل ویندوز با خطای دسترسی اسکریپت روبهرو شدید، دسترسی اجرای اسکریپتها را برای کاربر جاری فعال کنید:
powershellSet-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
پس از فعالسازی، نام محیط در ابتدای خط فرمان ترمینال داخل پرانتز نمایش داده میشود:
text(.venv) user@host:~/my_project$
راستیآزمایی محیط در پایتون با خروجی واقعی
برای اینکه مطمئن شوید پایتون دقیقاً از محیط مجزا اجرا میشود و پایتون اصلی دستنخورده مانده است، میتوانید متغیرهای سیستمی را بررسی کنید. مستندات رسمی پایتون توضیح میدهد که هنگام کار در محیط مجازی، مقدار sys.prefix با sys.base_prefix تفاوت دارد:
bashpython -c "import sys; print('محیط جاری:', sys.prefix); print('پایتون پایه:', sys.base_prefix)"
خروجی واقعی این دستور در ترمینال به این شکل خواهد بود:
textمحیط جاری: /home/user/my_project/.venv
پایتون پایه: /usr
همانطور که میبینید، مفسر برای پیدا کردن کتابخانهها ابتدا به پوشه .venv نگاه میکند. اکنون هر بستهای که با pip install نصب کنید، درون همین مسیر ذخیره میشود.
خروج از محیط مجازی
هر زمان که کار با پروژه تمام شد یا خواستید به محیط سراسری برگردید، کافی است دستور زیر را در ترمینال بنویسید:
bashdeactivate
با این دستور، متغیرهای محیطی به حالت قبل بازمیگردند و نام محیط از کنار خط فرمان حذف میشود.
اشتباهات رایج کار با venv
نخستین اشتباه این است که پوشه محیط مجازی را داخل گیت کامیت کنید. پوشه .venv حجم بالایی دارد و به مفسر سیستم فعلی وابسته است. انتقال آن به گیتهاب اشتباه است و پروژه روی سیستم همتیمیها کار نخواهد کرد. از نسخه ۳.۱۳ پایتون، ماژول venv به شکل خودکار یک فایل .gitignore درون پوشه محیط میسازد، اما اگر از نسخههای قبلی استفاده میکنید، همیشه نام پوشه محیط را به .gitignore پروژه خود اضافه کنید.
دومین اشتباه، انتقال یا تغییر نام پوشه پروژه بدون ساخت مجدد محیط است. چون اسکریپتهای فعالسازی مسیر کامل فایلها را در خود نگه میدارند، جابهجا کردن پوشه باعث خرابی اسکریپتها میشود. راهحل درست این است که پوشه قبلی را حذف و با دستور python -m venv .venv محیط تازهای بسازید.
سومین اشتباه، نصب بستهها پیش از فعالکردن محیط است. اگر دستور activate را اجرا نکنید، دستور pip install بستهها را روی پایتون سیستم نصب میکند که ممکن است با پکیج منیجر لینوکس مثل apt یا dnf تداخل پیدا کند.
قدم بعدی برای مدیریت پروژهها
پس از ساخت محیط و نصب بستههای مورد نیاز، فهرست آنها را در یک فایل متنی ذخیره کنید تا دیگران یا سرور مقصد بتوانند همان نسخهها را بازسازی کنند:
bashpip freeze > requirements.txt
هر زمان پروژه را در جای دیگر دانلود کردید، با ساخت یک محیط تازه و اجرای دستور pip install -r requirements.txt تمام ملزومات با یک فرمان آماده اجرا میشوند. برای تسلط بر ساختار پروژههای استاندارد و کدنویسی ساختاریافته، سرفصلهای دوره پایتون از صفر تا برنامهنویس مسیر یادگیری را گامبهگام پوشش میدهد.




نظرها
اولین نفری باشید که نظر میدهدسؤالتان را بپرسید یا تجربهتان را بنویسید تا نویسندهی مطلب پاسخ بدهد.