လွယ်လွယ်ပြောရရင် Package Manager ဆိုတာ code library တွေကို ဒေါင်းလုပ်ဆွဲပြီး စီမံပေးတဲ့ tool ပါ။ ကိုယ်တိုင် code အသစ်အသစ် ရေးနေစရာ မလိုဘဲ သူများရေးပြီးသား အဆင်သင့် code ထုပ်တွေ (package) ကို တစ်ကြောင်းတည်း command နဲ့ ယူသုံးလို့ ရတယ်။
ဖုန်းထဲက Play Store နဲ့ တူတူပဲ စဉ်းစားကြည့်ပါ။
ဖုန်းမှာ ဓာတ်ပုံရိုက်ချင်ရင် ကိုယ်တိုင် camera app ရေးစရာ မလိုဘူး — Play Store ကနေ ဒေါင်းလုပ်ဆွဲလိုက်ရုံပဲ။ Package Manager လည်း ဒီလိုပဲ။ ဥပမာ Python နဲ့ website တစ်ခုကို request လှမ်းချင်ရင် ကိုယ်တိုင် HTTP protocol code တွေ ထိုင်ရေးနေစရာ မလိုဘူး။ Terminal မှာ ဒီတစ်ကြောင်း ရိုက်လိုက်ရုံပဲ —
pip install requests
ပြီးရင် ကိုယ့် code ထဲမှာ import requests လို့ ရေးပြီး သုံးလိုက်ရုံပဲ။ npm ဆိုတာ JavaScript အတွက် အတူတူပဲ —
npm install express
ဒါဆို ဘာလို့ copy-paste နဲ့ code ကူးယူသုံးလို့ မရတာလဲ? ရတယ်၊ ဒါပေမယ့် ပြဿနာ သုံးခု ရှိတယ် —
Update လုပ်ဖို့ ခက်တယ်။ library အသစ်ထွက်ရင် ဖိုင်အဟောင်းကို ရှာပြီး အစားထိုးရတယ်။ Package Manager ဆို pip install --upgrade requests တစ်ကြောင်းနဲ့ ပြီးတယ်
Dependency တွေ ပျောက်တယ်။ library တစ်ခုက နောက် library တွေကို မှီခိုနေတတ်တယ် (ဥပမာ A က B ကို လိုတယ်၊ B က C ကို လိုတယ်)။ Package Manager က ဒီအဆက်အစပ်အားလုံးကို သူ့ဘာသာ ရှာပြီး ဆွဲပေးတယ်
Version ကွဲလွဲတာ။ ကိုယ့်စက်မှာ library version 2.0 နဲ့ အလုပ်လုပ်ပေမယ့် သူငယ်ချင်းစက်မှာ 1.0 နဲ့ ဆိုရင် code က ပျက်တတ်တယ်။ ဒါကို “ကျွန်တော့်စက်မှာ အလုပ်လုပ်တယ်” ပြဿနာ (works on my machine) လို့ ခေါ်တယ်
ဒါကို ဖြေရှင်းဖို့ project တိုင်းမှာ version စာရင်း ဖိုင်တစ်ခု ထားတယ် —
Python — requirements.txt ဖိုင်ထဲမှာ requests==2.31.0 လို့ ရေးထားတယ်။ သူငယ်ချင်းက pip install -r requirements.txt ရိုက်ရင် version အတူတူ ရတယ်
JavaScript — package.json ဖိုင်ထဲမှာ dependency တွေ မှတ်ထားတယ်။ npm install ရိုက်ရင် အားလုံး အလိုလို ဆွဲပေးတယ်
Package Manager အသုံးများတာတွေ သိထားသင့်တယ် —
pip — Python အတွက်။ pip install, pip uninstall, pip list
npm — JavaScript/Node.js အတွက်။ npm install, npm update
apt — Ubuntu/Linux အတွက် system package တွေ။ sudo apt install git
Composer — PHP အတွက်၊ Maven/Gradle — Java အတွက်
စတင်သူတွေ သတိထားရမယ့် အချက်လေးတွေ —
မသိတဲ့ package ကို မျက်စိမှိတ် မသွင်းနဲ့ — နာမည်တူ အတု (typosquatting) တွေ ရှိတယ်။ ဥပမာ requests အစား reqeusts ဆိုပြီး အမှားနာမည်နဲ့ malware တင်ထားတာမျိုး
Download အရေအတွက် များတဲ့၊ update ပုံမှန်လုပ်တဲ့ package ကို ရွေးပါsudo pip install လို့ system-wide မသွင်းနဲ့ — virtual environment (venv) သုံးပါ။ project တစ်ခု library version တစ်ခုစီ သီးသန့်ထားတာ အကောင်းဆုံးပဲ
ကျွန်တော် အစက programming စသင်တုန်းက library ဆိုတာ ဘာမှန်းကို မသိခဲ့ဘူး။ အရာရာ ကိုယ်တိုင် ထိုင်ရေးတယ်။ နောက်မှ pip ကို သိသွားတော့ “ဒါဆို ငါ အချိန်တွေ အများကြီး ဖြုန်းခဲ့တာပဲ” လို့ နောင်တရမိတယ်။ DRY ဆိုတဲ့ စည်းမျဉ်း ရှိတယ် — Don’t Repeat Yourself။ သူများ ကောင်းကောင်း ရေးပြီးသားကို ပြန်မရေးနဲ့၊ package အဖြစ် ယူသုံး။ ဒါပဲ။ 🙂