pip در جنگو ابزار مدیریت پکیج (Package Manager) پایتون است که به توسعه‌دهندگان اجازه می‌دهد پکیج‌های موردنیاز خود را به‌سادگی نصب، حذف، به‌روزرسانی و مدیریت کنند. اگر با جنگو (Django) کار می‌کنید، pip ابزار اصلی شما برای نصب خود جنگو و تمام کتابخانه‌های جانبی مانند Django REST Framework، Pillow، mysqlclient و ده‌ها پکیج دیگر است. بدون pip، مدیریت وابستگی‌های یک پروژه واقعی تقریباً غیرممکن می‌شود. در این راهنما، تمام دستورات pip در بستر جنگو را به‌صورت عملی و با مثال توضیح می‌دهم تا از نصب اولیه تا مدیریت حرفه‌ای وابستگی‌ها را به‌طور کامل پوشش دهم.

در سال‌ها کار با پروژه‌های جنگو، بارها دیده‌ام که توسعه‌دهندگان تازه‌کار با مشکل نصب پکیج، تداخل نسخه‌ها یا فراموش کردن به‌روزرسانی requirements.txt دست‌وپنجه نرم می‌کنند. اکثر این مشکلات ریشه در عدم تسلط بر pip دارد. این مقاله قرار است آن شکاف را پر کند.

pip چیست و چرا در جنگو ضروری است؟

pip یک سیستم مدیریت پکیج (Package Management System) برای پایتون است که به‌طور پیش‌فرض همراه با نصب‌کننده پایتون عرضه می‌شود[reference:0]. این ابزار به شما اجازه می‌دهد پکیج‌های پایتون مانند جنگو را از مخزن PyPI (Python Package Index) دانلود، نصب و مدیریت کنید. زمانی که یک پکیج را با pip نصب می‌کنید، pip به‌طور خودکار وابستگی‌های آن پکیج را نیز شناسایی و نصب می‌کند.

در اکوسیستم جنگو، pip نقش محوری دارد. جنگو خود یک پکیج پایتون است و برای نصب آن از pip استفاده می‌شود. علاوه بر این، هر پروژه جنگو معمولاً به ده‌ها پکیج جانبی نیاز دارد که همگی با pip مدیریت می‌شوند.

«pip ستون فقرات مدیریت وابستگی در پروژه‌های جنگو است. بدون تسلط بر آن، هر پروژه جدی به‌سرعت به یک آشفتگی نسخه‌ای تبدیل می‌شود.»

راه‌اندازی محیط مجازی قبل از استفاده از pip

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

ایجاد محیط مجازی

برای ایجاد یک محیط مجازی در ویندوز:

py -m venv project-name

در لینوکس و مک:

python3 -m venv project-name

این دستور یک پوشه به نام project-name ایجاد می‌کند که شامل یک نسخه مستقل از پایتون و pip است.

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

در ویندوز:

project-nameScriptsactivate.bat

در لینوکس و مک:

source project-name/bin/activate

پس از فعال‌سازی، نام محیط مجازی در ابتدای خط فرمان نمایش داده می‌شود. هر بار که پنجره ترمینال جدیدی باز می‌کنید، باید محیط مجازی را دوباره فعال کنید.

پس از فعال‌سازی محیط مجازی، هر دستور pip که اجرا کنید، فقط در همان محیط اعمال می‌شود. این یعنی نصب جنگو در محیط مجازی، روی نسخه سیستمی جنگو تأثیری ندارد.

نصب جنگو با pip: از ساده تا پیشرفته

نصب آخرین نسخه پایدار

ساده‌ترین راه نصب جنگو، اجرای دستور زیر در محیط مجازی فعال است:

pip install django

این دستور آخرین نسخه پایدار جنگو را از PyPI دانلود و نصب می‌کند. در ویندوز می‌توانید از py -m pip install Django استفاده کنید[reference:1].

نصب نسخه مشخص

گاهی نیاز دارید نسخه خاصی از جنگو را نصب کنید، مثلاً به‌دلیل سازگاری با یک پکیج دیگر:

pip install django==4.2.0

این دستور دقیقاً نسخه 4.2.0 را نصب می‌کند[reference:2]. اگر می‌خواهید آخرین نسخه سازگار با یک سری نسخه را نصب کنید، از عملگر ~= استفاده کنید:

pip install "django~=5.0.4"

این دستور آخرین نسخه patch از شاخه 5.0 را نصب می‌کند[reference:3].

نصب از فایل requirements.txt

در پروژه‌های واقعی، به‌جای نصب دستی هر پکیج، از فایل requirements.txt استفاده می‌شود. این فایل شامل لیست تمام پکیج‌ها و نسخه‌های موردنیاز پروژه است:

pip install -r requirements.txt

این دستور تمام پکیج‌های ذکرشده در فایل را به‌ترتیب نصب می‌کند[reference:4].

ارتقای جنگو

برای به‌روزرسانی جنگو به آخرین نسخه:

pip install --upgrade django

یا به‌صورت خلاصه:

pip install -U Django

pip به‌طور خودکار نسخه قبلی را حذف و نسخه جدید را نصب می‌کند[reference:5].

حذف جنگو

برای حذف جنگو از محیط:

pip uninstall django

این دستور نسخه نصب‌شده جنگو و وابستگی‌های آن را حذف می‌کند[reference:6].

دستورات ضروری pip برای پروژه‌های جنگو

مشاهده لیست پکیج‌های نصب‌شده

pip list

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

pip list | grep Django

در ویندوز از pip list | findstr Django استفاده کنید[reference:7].

مشاهده اطلاعات یک پکیج خاص

pip show django

این دستور اطلاعات کاملی درباره پکیج جنگو شامل نسخه، محل نصب، وابستگی‌ها و نویسنده نمایش می‌دهد[reference:8].

مشاهده پکیج‌های قدیمی

pip list --outdated

این دستور پکیج‌هایی که نسخه جدیدتری دارند را نمایش می‌دهد. برای پروژه‌های جنگو، به‌روزرسانی منظم پکیج‌ها امنیتی و عملکردی مهم است.

خروجی گرفتن از پکیج‌های نصب‌شده

pip freeze > requirements.txt

این دستور لیست تمام پکیج‌های نصب‌شده با نسخه دقیق را در فایل requirements.txt ذخیره می‌کند. این فایل را می‌توانید در مخزن گیت قرار دهید تا سایر اعضای تیم و سرورهای تولید بتوانند همان محیط را بازسازی کنند[reference:9].

جستجوی پکیج

برای جستجوی یک پکیج در PyPI:

pip search django

توجه: دستور pip search در نسخه‌های جدید pip غیرفعال شده است. به‌جای آن از وب‌سایت PyPI استفاده کنید.

مشاهده راهنمای pip

pip help

برای مشاهده راهنمای یک دستور خاص:

pip help install

مدیریت وابستگی‌ها با requirements.txt

فایل requirements.txt قلب مدیریت وابستگی در پروژه‌های جنگو است. این فایل شامل لیست پکیج‌های موردنیاز پروژه به‌همراه نسخه دقیق آن‌هاست. یک نمونه فایل requirements.txt برای پروژه جنگو:

Django==5.1.7
psycopg2-binary==2.9.10
djangorestframework==3.15.2
django-filter==24.3
gunicorn==23.0.0
whitenoise==6.9.0

با استفاده از این فایل، هر توسعه‌دهنده‌ای می‌تواند با اجرای pip install -r requirements.txt همان محیط را بازسازی کند. این کار از مشکل «روی سیستم من کار می‌کند» جلوگیری می‌کند[reference:10].

ایجاد requirements.txt امن

هنگام ایجاد requirements.txt، مطمئن شوید که فقط پکیج‌های واقعاً موردنیاز پروژه در آن هستند. استفاده از محیط مجازی اختصاصی برای هر پروژه این کار را تضمین می‌کند. اگر خارج از محیط مجازی دستور pip freeze را اجرا کنید، تمام پکیج‌های سیستمی نیز در فایل قرار می‌گیرند[reference:11].

به‌روزرسانی requirements.txt

پس از نصب پکیج جدید، همیشه requirements.txt را به‌روز کنید:

pip install package-name
pip freeze > requirements.txt

این کار تضمین می‌کند که فایل requirements.txt همیشه با محیط فعلی هماهنگ باشد.

نصب پکیج‌های تخصصی جنگو با pip

Django REST Framework

pip install djangorestframework

این پکیج برای ساخت APIهای RESTful در جنگو استفاده می‌شود. پس از نصب، rest_framework را به INSTALLED_APPS اضافه کنید[reference:12].

Pillow برای پردازش تصویر

pip install pillow

اگر از ImageField در مدل‌های جنگو استفاده می‌کنید، Pillow الزامی است. این پکیج برای اعتبارسنجی و پردازش تصاویر استفاده می‌شود[reference:13].

mysqlclient برای اتصال به MySQL

pip install mysqlclient

این پکیج درایور رسمی MySQL برای پایتون است. پس از نصب، تنظیمات DATABASES در settings.py را به MySQL تغییر دهید[reference:14].

django-cors-headers برای حل CORS

pip install django-cors-headers

اگر فرانت‌اند و بک‌اند شما روی دامنه‌های جداگانه اجرا می‌شوند، این پکیج برای مدیریت CORS (Cross-Origin Resource Sharing) ضروری است[reference:15].

django-debug-toolbar برای اشکال‌زدایی

pip install django-debug-toolbar

این ابزار به شما اجازه می‌دهد کوئری‌های SQL، زمان اجرا و سایر اطلاعات اشکال‌زدایی را در مرورگر مشاهده کنید. فقط در محیط توسعه استفاده کنید[reference:16].

django-allauth برای احراز هویت

pip install django-allauth

برای پیاده‌سازی سیستم ثبت‌نام و ورود با حساب‌های اجتماعی:

pip install "django-allauth[socialaccount]"

این پکیج از ورود با گوگل، فیسبوک، توییتر و ده‌ها سرویس دیگر پشتیبانی می‌کند[reference:17].

django-filter برای فیلتر کردن QuerySet

pip install django-filter

این پکیج به شما اجازه می‌دهد به‌صورت declarative فیلترهای پویا برای QuerySetها بسازید[reference:18].

Gunicorn برای استقرار در تولید

pip install gunicorn

Gunicorn یک WSGI HTTP Server برای یونیکس است که برای اجرای جنگو در محیط تولید استفاده می‌شود[reference:19].

WhiteNoise برای سرو فایل‌های استاتیک

pip install whitenoise

این پکیج به‌جای نیاز به Nginx یا Apache برای سرو فایل‌های استاتیک، خود جنگو را قادر می‌سازد این کار را انجام دهد[reference:20].

django-environ برای مدیریت متغیرهای محیطی

pip install django-environ

این پکیج به شما اجازه می‌دهد تنظیمات حساس مانند SECRET_KEY و اطلاعات دیتابیس را از فایل .env بخوانید، نه از کد[reference:21].

psycopg2-binary برای PostgreSQL

pip install psycopg2-binary

درایور PostgreSQL برای پایتون. نسخه binary برای توسعه و تست مناسب است، اما در تولید توصیه می‌شود از نسخه سورس استفاده کنید[reference:22].

django-celery-beat و django-celery-results

pip install django-celery-beat
pip install django-celery-results

این دو پکیج برای مدیریت تسک‌های زمان‌بندی‌شده و ذخیره نتایج Celery در دیتابیس استفاده می‌شوند[reference:23][reference:24].

django-axes برای جلوگیری از Brute Force

pip install django-axes[ipware]

این پکیج تلاش‌های ناموفق ورود را ردیابی و پس از تعداد مشخصی تلاش، IP را بلاک می‌کند[reference:25].

خطاهای رایج pip و روش رفع آن‌ها

خطای pip install mysqlclient

نصب mysqlclient روی برخی سیستم‌ها به‌دلیل نبود کتابخانه‌های توسعه MySQL با خطا مواجه می‌شود. راه‌حل:

در اوبونتو/دبیان:

sudo apt install python3-dev default-libmysqlclient-dev build-essential

در مک:

brew install mysql pkg-config

سپس دوباره pip install mysqlclient را اجرا کنید.

خطای Command "python setup.py egg_info" failed

این خطا معمولاً به‌دلیل نبود setuptools یا wheel به‌روز رخ می‌دهد:

pip install --upgrade setuptools wheel

خطای Permission denied

اگر با خطای دسترسی مواجه شدید، به‌جای استفاده از sudo (که می‌تواند به محیط سیستمی آسیب بزند)، از محیط مجازی استفاده کنید. اگر مجبور به نصب سیستمی هستید:

pip install --user package-name

خطای SSL Certificate Verify Failed

این خطا در شبکه‌هایی با پروکسی یا فایروال رخ می‌دهد. راه‌حل موقت:

pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org package-name

راه‌حل اصولی، به‌روزرسانی certifi است:

pip install --upgrade certifi

خطای pip: command not found

اگر pip نصب نیست، ابتدا ensurepip را اجرا کنید:

python -m ensurepip --upgrade

سپس pip را به‌روز کنید:

python -m pip install --upgrade pip

تداخل نسخه‌ها

اگر پس از نصب یک پکیج، پروژه از کار افتاد، احتمالاً نسخه‌ای ناسازگار نصب شده است. راه‌حل:

pip install package-name==compatible-version

همیشه قبل از به‌روزرسانی پکیج‌ها، از requirements.txt نسخه پشتیبان بگیرید.

استفاده‌های پیشرفته از pip در جنگو

نصب از مخزن گیت

گاهی نیاز دارید نسخه development یک پکیج را نصب کنید:

pip install git+https://github.com/user/repo.git#egg=package-name

این روش برای پکیج‌هایی مفید است که نسخه پایدارشان باگ دارد و نسخه development رفع شده است.

نصب با استفاده از پروکسی

در شبکه‌های سازمانی که نیاز به پروکسی دارند:

pip install --proxy http://user:password@proxy_server:port package-name

یا از متغیرهای محیطی استفاده کنید:

export HTTP_PROXY=http://proxy_server:port
export HTTPS_PROXY=http://proxy_server:port

نصب از فایل wheel محلی

اگر فایل wheel یک پکیج را دانلود کرده‌اید:

pip install package-name-1.0.0-py3-none-any.whl

این روش برای نصب آفلاین یا در محیط‌هایی با دسترسی محدود به اینترنت مفید است.

نصب وابستگی‌های اختیاری

برخی پکیج‌ها وابستگی‌های اختیاری دارند که با براکت مشخص می‌شوند:

pip install "django-allauth[socialaccount,mfa]"

این دستور علاوه بر خود django-allauth، پکیج‌های موردنیاز برای ورود اجتماعی و احراز هویت دو مرحله‌ای را نیز نصب می‌کند[reference:26].

بررسی وابستگی‌های درختی

برای مشاهده اینکه هر پکیج به چه پکیج‌های دیگری وابسته است:

pip install pipdeptree
pipdeptree

این ابزار برای شناسایی وابستگی‌های متناقض در پروژه‌های بزرگ جنگو بسیار مفید است.

استفاده از pip-tools برای مدیریت دقیق‌تر

pip-tools به شما اجازه می‌دهد فایل requirements.txt را از یک فایل ساده‌تر (requirements.in) تولید کنید:

pip install pip-tools
pip-compile requirements.in
pip-sync requirements.txt

این روش برای پروژه‌های تیمی که نیاز به بازتولیدپذیری دقیق دارند توصیه می‌شود.

پرسش‌های پرتکرار درباره pip در جنگو

آیا pip به‌طور پیش‌فرض همراه پایتون نصب می‌شود؟

بله، از پایتون 3.4 به بعد pip به‌طور پیش‌فرض همراه نصب‌کننده پایتون عرضه می‌شود[reference:27]. با این حال، در برخی توزیع‌های لینوکس ممکن است نیاز به نصب جداگانه داشته باشد.

تفاوت pip و pip3 چیست؟

در سیستم‌هایی که هم پایتون 2 و هم پایتون 3 نصب است، pip ممکن است به پایتون 2 اشاره کند و pip3 به پایتون 3. از آنجا که جنگو 2 به بعد فقط با پایتون 3 کار می‌کند، همیشه از pip3 یا python3 -m pip استفاده کنید[reference:28].

چرا باید از محیط مجازی استفاده کنم؟

محیط مجازی از تداخل نسخه‌ها بین پروژه‌های مختلف جلوگیری می‌کند. بدون آن، نصب یک پکیج برای یک پروژه می‌تواند پروژه دیگر را خراب کند. همچنین pip freeze در خارج از محیط مجازی، تمام پکیج‌های سیستمی را نیز شامل می‌شود که requirements.txt را غیرقابل استفاده می‌کند[reference:29].

چگونه pip را به‌روز کنم؟

python -m pip install --upgrade pip

در لینوکس ممکن است نیاز به pip3 باشد. همیشه pip را قبل از نصب پکیج‌های جدید به‌روز کنید.

آیا می‌توانم pip را بدون اینترنت استفاده کنم؟

بله، اگر فایل‌های wheel پکیج‌ها را از قبل دانلود کرده باشید:

pip install --no-index --find-links=/path/to/wheels package-name

این روش در محیط‌های ایزوله یا با پهنای باند محدود کاربرد دارد.

چگونه بفهمم کدام نسخه جنگو نصب است؟

pip show django

یا:

python -m django --version

روش اول اطلاعات کامل‌تری شامل محل نصب و وابستگی‌ها نمایش می‌دهد[reference:30].

چرا pip freeze پکیج‌های اضافی نشان می‌دهد؟

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

چگونه پکیج نصب‌شده را حذف کنم؟

pip uninstall package-name

برای حذف بدون تأیید:

pip uninstall -y package-name

سپس requirements.txt را به‌روز کنید.

دیدگاه مهندسی پیشرفته

در سطح مهندسی ارشد، مدیریت وابستگی با pip فراتر از اجرای چند دستور ساده است. چالش اصلی، تضمین بازتولیدپذیری (Reproducibility) محیط در طول زمان و در سرورهای مختلف است. وقتی یک پروژه جنگو به تولید می‌رود، هر نسخه از پکیج‌ها باید دقیقاً مشخص باشد تا رفتار برنامه قابل پیش‌بینی بماند.

مشکل رایج pip freeze این است که وابستگی‌های transitive (وابستگی‌های وابستگی‌ها) را نیز شامل می‌شود و auditing آن دشوار است. برای پروژه‌های جدی، استفاده از pip-tools با فایل requirements.in و requirements.txt تولیدشده، کنترل دقیق‌تری فراهم می‌کند. علاوه بر این، ابزارهایی مانند pip-audit می‌توانند آسیب‌پذیری‌های امنیتی پکیج‌ها را شناسایی کنند.

در محیط‌های تولیدی، استفاده از --require-hashes برای تأیید یکپارچگی پکیج‌ها توصیه می‌شود. این گزینه از حملات supply chain که در آن یک پکیج آلوده به‌جای نسخه اصلی نصب می‌شود، جلوگیری می‌کند. همچنین، برای CI/CD، استفاده از کش pip و نصب موازی با pip install --use-feature=fast-deps می‌تواند زمان build را به‌طور قابل‌توجهی کاهش دهد.

یک نکته کمتر شناخته‌شده: pip در نسخه‌های اخیر از --config-settings پشتیبانی می‌کند که اجازه می‌دهد پارامترهای build پکیج‌ها را بدون تغییر فایل setup.py تنظیم کنید. این قابلیت در محیط‌های تولیدی که نیاز به کامپایل پکیج‌های C extension با فلگ‌های بهینه‌سازی خاص دارند، ارزشمند است.

«در پروژه‌های بزرگ جنگو، مدیریت وابستگی نه یک کار جانبی، بلکه یک تصمیم معماری است. هر پکیجی که اضافه می‌کنید، یک سطح حمله جدید و یک ریسک سازگاری به همراه دارد.»

سخن پایانی

pip در جنگو ابزاری است که اگر درست استفاده شود، جریان کار توسعه را روان و قابل پیش‌بینی می‌کند. از نصب اولیه جنگو تا مدیریت ده‌ها پکیج جانبی، همه چیز از طریق pip انجام می‌شود. کلید موفقیت در استفاده از pip، درک محیط مجازی، مدیریت دقیق requirements.txt و آگاهی از خطاهای رایج است.

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