هر پروژه، جعبهی خودش
فرض کنید پروژهی A به Django 4.2 نیاز دارد و پروژهی B به Django 5.1. اگر هر دو کتابخانه را در پایتون اصلی سیستم نصب کنید، فقط یکی میتواند وجود داشته باشد. محیط مجازی (virtual environment) یک پوشه است که یک کپی سبک از مفسر و پوشهی مخصوص کتابخانهها را در خود دارد؛ هر پروژه کتابخانههای خودش را دارد و به بقیه دست نمیزند. قاعدهی حرفهای ساده است: برای هر پروژه یک venv، و هیچوقت نصب در پایتون سراسری.
ساخت و فعالسازی در PowerShell
cd D:\projects\carpet-orders
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
python --version
python -c "import sys; print(sys.prefix)"
بعد از فعالسازی، ابتدای خط فرمان (.venv) ظاهر میشود و دستور python به مفسر داخل پوشهی .venv اشاره میکند. برای خروج کافی است deactivate را بزنید. نام .venv یک قرارداد رایج است و VS Code آن را خودکار تشخیص میدهد.
خطای «running scripts is disabled on this system»
ویندوز بهطور پیشفرض اجرای اسکریپتهای PowerShell (از جمله Activate.ps1) را ممنوع میکند. راهحل امن این است که فقط برای کاربر خودتان اجازهی اسکریپتهای محلی را بدهید:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
Get-ExecutionPolicy -List
RemoteSigned یعنی اسکریپتهایی که روی سیستم خودتان ساخته شدهاند اجرا میشوند، ولی اسکریپت دانلودشده از اینترنت باید امضا داشته باشد. این دستور نیاز به Administrator ندارد و فقط یک بار لازم است. اگر سازمانتان با Group Policy این تنظیم را قفل کرده، میتوانید برای یک جلسهی موقت از Set-ExecutionPolicy -Scope Process Bypass استفاده کنید.
ساختار پوشهی venv
| مسیر | محتوا |
|---|---|
.venv\Scripts\python.exe | مفسر محیط (در لینوکس و مک: .venv/bin/python) |
.venv\Scripts\Activate.ps1 | اسکریپت فعالسازی PowerShell (برای cmd: activate.bat) |
.venv\Lib\site-packages | کتابخانههای نصبشدهی همین پروژه |
.venv\pyvenv.cfg | مسیر پایتون پایه و نسخهی آن |
venv را جزو پروژه حساب نکنید
پوشهی .venv قابلانتقال نیست: مسیرهای مطلق داخلش نوشته شده است. آن را در .gitignore بگذارید، کپی نکنید و در زیپ پروژه نفرستید. آنچه باید منتقل شود فهرست کتابخانههاست (requirements.txt، درس بعد)؛ هرکس با آن میتواند در یک دقیقه محیط را از نو بسازد. اگر venv خراب شد یا نسخهی پایتون را عوض کردید، سادهترین راه حذف پوشه و ساخت دوباره است.
نکتههایی که کمتر کسی میداند
- فعالسازی اجباری نیست:
.\.venv\Scripts\python.exe script.pyهمان کار را میکند. در Task Scheduler و سرویسهای ویندوز همیشه همین مسیر کامل را بدهید، چون آنجا کسی Activate نمیکند. - اگر پوشهی پروژه را جابهجا یا تغییر نام دهید، venv نیمهخراب میشود (pip به مسیر قدیمی اشاره میکند)؛ بهجای تعمیر، آن را دوباره بسازید.
py -m venv .venv --upgrade-depsهنگام ساخت، pip داخل محیط را هم به آخرین نسخه ارتقا میدهد.- VS Code وقتی پوشهی
.venvرا در ریشهی پروژه ببیند، ترمینالهای جدید را خودکار فعال میکند؛ اگر نکرد، یکبار Select Interpreter را روی همان venv بزنید. - در cmd قدیمی بهجای Activate.ps1 باید
.venv\Scripts\activate.batاجرا شود و ExecutionPolicy آنجا اصلاً مطرح نیست.