خانه / آموزش‌ها / مدیریت بسته‌ها و محیط‌های مجازی (PIP و Virtual Environments)

مدیریت بسته‌ها و محیط‌های مجازی (PIP و Virtual Environments)

🐍 HomeOfPython
|
📅 1404/10/19

سطح مقدماتی (Beginner Level)

قدرت واقعی پایتون در کتابخانه‌های شخص ثالث (Third-party Libraries) آن نهفته است. مخزن بسته‌های پایتون (PyPI) حاوی صدها هزار ابزار آماده است. برای استفاده از این ابزارها، باید یاد بگیریم چگونه آن‌ها را نصب و مدیریت کنیم.

۱. مفهوم PIP (مدیر بسته)

کلمه PIP مخفف "PIP Installs Packages" است. این ابزار استانداردی برای نصب و مدیریت بسته‌های نرم‌افزاری است که در پایتون نوشته شده‌اند.

دستورات پایه‌ای PIP

برای کار با PIP باید از ترمینال (Command Prompt یا Terminal) استفاده کنید، نه داخل کد پایتون.

مثال ۱: نصب یک پکیج برای نصب کتابخانه‌ای مثل requests (برای ارسال درخواست‌های HTTP):

bash
# این دستور در ترمینال اجرا می‌شود
pip install requests

مثال ۲: مشاهده لیست پکیج‌های نصب شده برای دیدن تمام کتابخانه‌هایی که در حال حاضر روی سیستم شما نصب هستند:

bash
pip list

مثال ۳: حذف یک پکیج اگر دیگر به پکیج requests نیاز ندارید:

bash
pip uninstall requests

۲. مفهوم محیط مجازی (Virtual Environment)

یکی از چالش‌های اصلی در برنامه‌نویسی، تداخل نسخه‌هاست. فرض کنید پروژه A به نسخه ۱.۰ از یک کتابخانه نیاز دارد و پروژه B به نسخه ۲.۰. اگر همه چیز را روی سیستم اصلی نصب کنید، این دو پروژه با هم تداخل پیدا می‌کنند.

راه‌حل: محیط مجازی (venv). محیط مجازی یک پوشه ایزوله است که پایتون و پکیج‌های مخصوص به همان پروژه را در خود نگه می‌دارد.

ساخت و فعال‌سازی محیط مجازی

این کار در دو مرحله انجام می‌شود: ساختن پوشه و سپس فعال کردن آن.

مرحله ۱: ساخت محیط مجازی در پوشه پروژه خود، دستور زیر را در ترمینال اجرا کنید (معمولاً نام محیط را .venv یا venv می‌گذارند):

bash
# ویندوز، مک و لینوکس
python -m venv .venv

مرحله ۲: فعال‌سازی (Activation) پس از ساخت، باید به سیستم بگویید که از این به بعد از پایتونِ داخل این پوشه استفاده کن.

مثال ۱: فعال‌سازی در ویندوز (Command Prompt)

cmd
.venv\Scripts\activate

مثال ۲: فعال‌سازی در ویندوز (PowerShell)

powershell
.venv\Scripts\Activate.ps1

مثال ۳: فعال‌سازی در مک و لینوکس

bash
source .venv/bin/activate

وقتی محیط مجازی فعال شود، معمولاً نام آن (مثلاً (.venv)) در ابتدای خط فرمان ترمینال ظاهر می‌شود.


بررسی فعال بودن محیط مجازی در کد

می‌توانیم با یک کد ساده پایتون بررسی کنیم که آیا در محیط مجازی هستیم یا خیر. این کد با مقایسه مسیر اجرایی پایتون کار می‌کند.

Python

سطح پیشرفته (Professional Level)

در پروژه‌های بزرگ و تیم‌های برنامه‌نویسی، مدیریت وابستگی‌ها فراتر از یک pip install ساده است. باید بتوانید محیط توسعه را دقیقاً برای همکارانتان بازسازی کنید.

۱. فایل requirements.txt

برای اینکه هم‌تیمی‌های شما یا سرورِ دیپلوی (Deploy) بداند چه پکیج‌هایی باید نصب شود، از فایلی به نام requirements.txt استفاده می‌کنیم.

تولید فایل وابستگی‌ها (Freeze)

دستور pip freeze تمام پکیج‌های نصب شده در محیط فعلی را به همراه نسخه دقیق آن‌ها لیست می‌کند.

مثال ۱: ذخیره لیست پکیج‌ها در فایل

bash
# خروجی pip freeze را داخل فایل requirements.txt می‌ریزد
pip freeze > requirements.txt

محتوای فایل ممکن است شبیه این باشد:

text
requests==2.28.1
numpy==1.23.3
urllib3==1.26.12

نصب وابستگی‌ها از روی فایل

وقتی پروژه را روی سیستم جدیدی کلون می‌کنید، به جای نصب تک‌تک پکیج‌ها، همه را یکجا نصب کنید:

مثال ۲: نصب گروهی

bash
pip install -r requirements.txt

۲. مدیریت دقیق نسخه‌ها (Version Specifiers)

گاهی اوقات نمی‌خواهید دقیقاً به یک نسخه محدود شوید، یا برعکس، می‌خواهید از نسخه‌های جدیدِ باگ‌دار اجتناب کنید.

مثال ۱: نصب نسخه خاص

bash
pip install pandas==1.4.2

مثال ۲: نصب حداقل نسخه (Minimum Version)

bash
# نسخه‌های بزرگتر یا مساوی ۲.۵ را نصب می‌کند
pip install "Django>=2.5"

مثال ۳: جلوگیری از آپدیت‌های ناسازگار

bash
# نسخه‌های بزرگتر از ۱.۰ ولی کمتر از ۲.۰ را نصب می‌کند (مثلاً ۱.۵، ۱.۹)
pip install "requests>=1.0,<2.0"

۳. نکات فنی و ساختاری (Best Practices)

الف) استفاده از python -m pip

همیشه توصیه می‌شود به جای دستور مستقیم pip، از python -m pip استفاده کنید.

  • چرا؟ اگر چندین نسخه پایتون روی سیستم دارید (مثلاً ۳.۹ و ۳.۱۰)، دستور pip ممکن است پکیج را روی پایتون اشتباه نصب کند. اما python -m pip تضمین می‌کند پکیج دقیقاً روی همان مفسر پایتونی نصب شود که python به آن اشاره دارد.
bash
# روش حرفه‌ای و ایمن
python -m pip install numpy

ب) مکان جستجوی پکیج‌ها (sys.path)

وقتی import می‌کنید، پایتون چگونه پکیج را پیدا می‌کند؟ پایتون لیستی از آدرس‌ها را در sys.path جستجو می‌کند.

Python

ج) کش کردن و نصب آفلاین

PIP به صورت خودکار فایل‌های دانلود شده را کش (Cache) می‌کند تا در نصب‌های بعدی سریع‌تر عمل کند.

مثال ۱: نصب بدون استفاده از اینترنت (در صورت وجود در کش)

bash
pip install --no-index --find-links=/local/dir/ some-package

مثال ۲: مشاهده اطلاعات کش

bash
pip cache info

۴. ابزارهای مدرن جایگزین (Poetry و Pipenv)

در سطح حرفه‌ای، گاهی requirements.txt کافی نیست زیرا وابستگی‌هایِ وابستگی‌ها (Transitive Dependencies) را به خوبی مدیریت نمی‌کند. ابزارهایی مانند Poetry یا Pipenv فایل‌های قفل (Lock files) ایجاد می‌کنند که دقیقاً هش (Hash) فایل‌ها را ذخیره کرده و امنیت و سازگاری ۱۰۰٪ را تضمین می‌کنند.

python
# Static snippet: ساختار فایل pyproject.toml در Poetry
# این روش مدرن‌تر از requirements.txt است
# [tool.poetry.dependencies]
# python = "^3.10"
# requests = "^2.28"