دستورات pip در جنگو: راهنمای کامل
pip در جنگو: نصب، مدیریت پکیج و رفع خطاهای رایج
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 در پروژههای جنگو دارید، خوشحال میشوم در دیدگاهها بشنوم. بهخصوص اگر راهحل خلاقانهای برای مدیریت وابستگیها پیدا کردهاید که میتواند برای سایر توسعهدهندگان مفید باشد.