پرش به محتوا
آموزش و مهارتآموزشی

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

اامیر رضایی۱ مهر ۱۴۰۵۴ دقیقه مطالعه۱۸۰ بازدید
مدیریت پکیج در برنامه‌نویسی؛ npm و pip و دنیای وابستگی‌ها

پکیج منیجر چیست و چطور کار می‌کند؟ آشنایی با npm و pip، فایل قفل، وابستگی‌های تو‌درتو و عادت‌های حرفه‌ای برای مدیریت پکیج‌های پروژه.

پکیج منیجر چه مشکلی را حل می‌کند؟

بیست سال پیش، برای استفاده از یک کتابخانهٔ آماده، باید فایل zip آن را از سایت نویسنده دانلود می‌کردید، در پوشهٔ پروژه می‌گذاشتید و امیدوار بودید با نسخهٔ زبان شما سازگار باشد. امروز همهٔ این کار با یک دستور انجام می‌شود: npm install axios یا pip install requests. پکیج منیجر ابزاری است که دانلود، نصب، به‌روزرسانی و حذف کتابخانه‌ها را از یک مخزن متمرکز (Registry) انجام می‌دهد و فهرست دقیق چیزی که پروژه لازم دارد را هم نگه می‌دارد.

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

مفاهیم مشترک همهٔ پکیج منیجرها

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

  • فهرست وابستگی: در Node فایل package.json و در پایتون requirements.txt؛ این فایل «دستور پخت» پروژه است.
  • نصب: npm install و pip install -r requirements.txt همهٔ کتابخانه‌های فهرست‌شده را نصب می‌کنند.
  • نصب سراسری و محلی: پکیج محلی فقط برای همان پروژه است؛ نصب سراسری فقط برای ابزارهای خط فرمان مثل nodemon جا دارد.
  • فایل قفل: package-lock.json نسخهٔ دقیق و نصب‌شدهٔ هر پکیج را ثبت می‌کند تا محیط همهٔ اعضای تیم یکی بماند.
  • اسکریپت‌ها: دستورهای کوتاه پروژه مثل اجرا و تست، در بخش scripts تعریف می‌شوند تا همه با یک npm run dev کارشان شروع شود.

npm در عمل: چرخهٔ کامل یک پکیج

سناریوی واقعی را ببینید: برای نمایش تاریخ شمسی در پروژه، پکیجی نصب می‌کنید و آن را در کد import می‌کنید. npm فایل‌ها را در پوشهٔ node_modules می‌گذارد، نام و بازهٔ نسخه را در package.json ثبت می‌کند و نسخهٔ دقیق را در package-lock.json قفل می‌کند. حالا پروژه را commit می‌کنید اما node_modules را نه؛ چون با یک npm install در هر ماشین دیگری، از روی فایل قفل دوباره ساخته می‌شود.

دو نکتهٔ عملی دربارهٔ npm: اول، پوشهٔ node_modules واقعاً بزرگ می‌شود (به‌راحتی چند صد مگابایت) و کاملاً طبیعی است؛ هرگز آن را دستی ویرایش نکنید یا copy نکنید. دوم، پکیج‌ها را با ذخیره‌کردن خودکار نصب کنید (npm install dayjs بدون فلگ -g) تا فهرست وابستگی‌ها دقیق بماند. اگر به فکر مشارکت در پروژه‌های متن‌باز هستید، همین جریانِ clone → install → run، اولین قدم هر مخزن است؛ راهنمای مشارکت در متن‌باز مسیر کامل را نشان می‌دهد.

pip و دنیای پایتون

pip همان نقش npm را در پایتون دارد اما دو تفاوت مهم دارد. اول، پایتون به‌صورت پیش‌فرض پکیج‌ها را سراسری نصب می‌کند؛ برای همین محیط مجازی (venv) ساختن، بخشی از روال استاندارد است: محیط را می‌سازید، فعال می‌کنید و بعد pip را داخل آن اجرا می‌کنید. دوم، فایل requirements.txt به‌صورت خودکار ساخته نمی‌شود؛ با دستور pip freeze > requirements.txt آن را تولید کنید و بعد از هر نصب جدید، تازه‌اش کنید.

تفاوت سوم که گاهی گیج‌کننده است: پایتون فایل قفل سراسری مثل npm ندارد (مگر با ابزارهای جدید مثل uv) و همین باعث می‌شود بین دو ماشین، نسخهٔ پکیج‌ها کمی فرق کند. راه‌حل ساده، پین‌کردن نسخه‌ها در requirements.txt است؛ یعنی به‌جای requests بنویسید requests==2.32.3. این عادت کوچک، سازگاری پروژهٔ پایتونی شما را تضمین می‌کند.

وابستگی‌های تو‌درتو و امنیت

هر پکیجی که نصب می‌کنید، خودش پکیج‌های دیگری لازم دارد؛ نتیجه، درختی عمیق از وابستگی‌های تو‌درتو (Transitive) است که ممکن است به صدها بسته برسد. این یعنی امنیت پروژه شما به سلامت کل آن درخت وابسته است؛ یک پکیج فراموش‌شده و متروک در عمق درخت، می‌تواند درگاه نفوذ باشد. برای همین پکیج منیجرها ابزار بازرسی دارند: npm audit و pip audit وابستگی‌های آسیب‌پذیر را فهرست می‌کنند و npm audit fix نسخهٔ امن را جایگزین می‌کند.

قاعدهٔ عملی امنیت: گزارش audit را ماهی یک بار ببینید، به‌روزرسانی‌های امنیتی را همان هفته اعمال کنید و پکیج‌های بی‌به‌روزرسانی طولانی‌مدت را با جایگزین فعال عوض کنید. برای فهم چگونگی مدیریت نسخه‌ها در این به‌روزرسانی‌ها، آشنایی با نسخه‌بندی معنایی قدم بعدی طبیعی است.

عادت‌های حرفه‌ای مدیریت پکیج

  • فایل قفل را commit کنید: lockfile بخشی از پروژه است، نه زبالهٔ محلی؛ همین فایل است که محیط تیم را یکی نگه می‌دارد.
  • node_modules را هرگز push نکنید: هم حجم گیت را می‌ترکاند و هم بی‌معنی است؛ .gitignore از روز اول مراقب است.
  • قبل از نصب، پکیج را بشناسید: تعداد دانلود هفتگی، آخرین به‌روزرسانی و مسائل باز مخزن را ببینید؛ پنج دقیقه بررسی، از پنج روز عوض‌کردن پکیج ارزان‌تر است.
  • مستندات را جدی بگیرید: روش خواندن مستندات فنی نشان می‌دهد چطور از صفحهٔ رسمی هر پکیج، نحوهٔ درست استفاده را دربیاورید.
  • کم اما کافی: هر پکیج جدید، هزینهٔ نگهداری است؛ قبل از نصب بپرسید «آیا واقعاً لازم است؟».

مدیریت پکیج شاید مهارت جذاب برنامه‌نویسی نباشد، اما همان چیزی است که پروژهٔ شما را از «روی لپ‌تاپ من کار می‌کند» به «هرجا اجرا شد کار می‌کند» می‌رساند. این عادت‌ها را از پروژهٔ بعدی شروع کنید؛ آموزش گیت و گیت‌هاب هم در کنارش کمک می‌کند کل جریان کاری‌تان حرفه‌ای شود.

ا
امیر رضایینویسنده حوزه کسب‌وکار و مهاجرت
مقالات نویسنده

این مطلب برایتان مفید بود؟

با پسندیدن، به ما کمک می‌کنید مطالب بهتری منتشر کنیم.

مطالب مرتبط

دو طرف میز مذاکره با برگهٔ پیشنهاد شغلی و ماشین‌حساب روی میز؛ نماد مذاکره حقوق و پیشنهاد شغلی
آموزش و مهارت

مذاکره حقوق در مصاحبه و پیشنهاد شغلی؛ بدون ریسک‌کردن فرصت

بیشتر ما اولین عددی که می‌شنویم را می‌پذیریم — و همان تفاوتِ سالانه را هر سال از دست می‌دهیم. این راهنمای مذاکره حقوق برای بازار ایران و دورکاری است: تحقیقِ عدد درست، زمان‌بندیِ اعلامش در مصاحبه، جمله‌های آماده و واکنش درست به پیشنهادِ کم.

تحریریه امروزینو
۱۴۰۵/۰۸/۰۱۵ دقیقه
فلش‌کارت‌ها و تقویم مرور فاصله‌دار با فواصل ۱، ۳، ۷، ۱۴ و ۳۰ روز
آموزش و مهارت

راه‌اندازی سیستم مرور فاصله‌دار؛ از ساخت فلش‌کارت تا کار با Anki

نظریه را بلدید اما سیستم ندارید؟ راهنمای عملی راه‌اندازی مرور فاصله‌دار: چه چیزی ارزش فلش‌کارت‌شدن دارد، شش قاعدهٔ کارت خوب، جدول ۱-۳-۷-۱۴-۳۰ و روتین نگهداری روزی ۱۵ دقیقه.

تحریریه امروزینو
۱۴۰۵/۰۸/۰۱۵ دقیقه
مقایسهٔ دو حالت مطالعه؛ تماشای منفعل ویدیو در برابر یادداشت‌برداری فعال
آموزش و مهارت

یادگیری فعال و منفعل؛ تفاوت واقعی و راه تبدیل مطالعهٔ منفعل به فعال

چرا سه ساعت تماشای ویدیو هیچ مهارتی نمی‌سازد؟ تفاوت واقعی یادگیری فعال و منفعل، توهم روانی‌بودن، پنج تکنیک عملی تبدیل و نسبت طلایی ۳۰ به ۷۰ در روتین هفتگی.

تحریریه امروزینو
۱۴۰۵/۰۸/۰۱۵ دقیقه
طرح اولیهٔ یک پروژه روی میز کار؛ ساختن به‌جای فقط تماشای دوره
آموزش و مهارت

یادگیری با پروژه؛ از جمع‌کردن دوره‌ها تا ساختن مهارت واقعی

چرا دوره‌دیدن به‌تنهایی مهارت نمی‌سازد و چطور یادگیری را دور یک پروژهٔ واقعی بچینیم؟ نردبان انتخاب پروژه، چرخهٔ ساخت و یادگیری ۷۰/۳۰، دو مثال واقعی و مسیر رسیدن به نمونه‌کار.

تحریریه امروزینو
۱۴۰۵/۰۸/۰۱۶ دقیقه