Virtual Environments
Virtual Environments ဆိုတာ?
ဘရိုရဲ့ ကွန်ပျူတာကို အိမ်ကြီးတစ်လုံး လို့ သဘောထားလိုက်။ အဲ့ဒီအိမ်မှာ Python ကို install လုပ်ထားတာက အိမ်ရဲ့ အဓိက လျှပ်စစ် main switch ကြီးလိုပဲ။
ဘရိုက Project တွေ စလုပ်ပြီ။ Project A (ဥပမာ: Website တစ်ခု) က အခန်း (A)။ Project B (ဥပမာ: Game တစ်ခု) က အခန်း (B)။
ကွိုင် (Conflict) က ဘယ်မှာစလဲ?
ကွိုင် က ဒီမှာစတာ။
Project A (အခန်း A) အတွက် ဘရိုက requests ဆိုတဲ့ package version 1.0 ကို တပ် (install) လိုက်တယ်။ အဆင်ပြေနေတယ်။
ခဏနေတော့... Project B (အခန်း B) မှာလည်း တပ်ချင်တယ်။ အဲ့ Project က requests version 2.0 အသစ် မှ အလုပ်လုပ်မယ်။ ဘရိုက main switch ကြီးမှာ requests v2.0 ကို တပ် လိုက်ရော။
Boom! Project A (အခန်း A) ကို ပြန် run ကြည့်တဲ့အခါ... ကွိုင် တက်ပြီ။ Error တွေ တဘုန်းဘုန်းတက်လာမယ်။ ဘာလို့လဲ? သူက v1.0 နဲ့မှ အလုပ်လုပ်တာ၊ v2.0 နဲ့ အဆင်မပြေဘူး။
Virtual Environment ဆိုတာ အဲ့ဒီ ကွိုင် ကို ဖြေရှင်းတာ
Virtual Environment (venv) ဆိုတာ အခန်းတစ်ခန်းစီကို သီးသန့် မီးလိုင်း (Sub-switch) ခွဲပေးလိုက်တာ။
- အခန်း A (Project A) အတွက် venv A ဆိုတဲ့ သီးသန့် ပုံးတစ်ပုံး ဖန်တီးလိုက်တယ်။
- အခန်း B (Project B) အတွက် venv B ဆိုတဲ့ သီးသန့် ပုံးတစ်ပုံး ဖန်တီးလိုက်တယ်။
အဲ့ဒီအခါ...
- venv A ပုံးထဲမှာ requests v1.0 ကို ထည့်ထား။
- venv B ပုံးထဲမှာ requests v2.0 ကို ထည့်ထား။
သူတို့ ပုံး တွေက သီးသန့်စီ ဖြစ်သွားတော့ တစ်ယောက်နဲ့တစ်ယောက် မထိတော့ဘူး။ အိမ်ကြီး (ကွန်ပျူတာ) လည်း မရှုပ်တော့ဘူး။ Project တစ်ခု လုပ်ချင်ရင် အဲ့ project ရဲ့ ပုံး (venv) ကို ဖွင့် (activate) လုပ်၊ ပြီးမှ အလုပ်လုပ်။
ဒါကို Isolating (သီးသန့်ခွဲထုတ်) လုပ်တယ်လို့ ခေါ်တယ်။
Tools တွေ
ကဲ... သီးသန့်ပုံး တွေ ဆောက်ဖို့ tool တွေ လာပြီ။
1. venv (Python မှာ အသင့် ပါ)
ဒါက Python 3.3 ကတည်းက အသင့် (built-in) ပါလာတာ။ တခြား ဘာမှ ထပ် install လုပ်စရာမလိုဘူး။
ဘယ်လိုသုံးလဲ?
Step 1: ပုံး ဆောက်မယ်
ဘရို Project folder ထဲကို Terminal (CMD) ကနေ သွား။
# Virtual environment တစ်ခု ဆောက်မယ်
$ python -m venv my_box
# Developer အများစုက 'venv' လို့ပဲ နာမည်ပေးလေ့ရှိတယ်
$ python -m venv venv
ဒါဆို my_box (မဟုတ်ရင် venv) ဆိုတဲ့ folder အသစ်လေးတစ်ခု ထွက်လာလိမ့်မယ်။ အဲ့ဒါ ပုံး ပဲ။
Step 2: ပုံး ကို ဖွင့် မယ် (Activate လုပ်မယ်)
ဒါ နည်းနည်းအရေးကြီး! ဒီအတိုင်း install လုပ်ရင် အပြင် (Global) မှာ ဝင်သွားမှာ။ ပုံးထဲ ဝင် ရမယ်။
# Windows မှာ activate လုပ်မယ်
$ my_box\Scripts\activate
# ဒါမှမဟုတ် venv သုံးထားရင်
$ venv\Scripts\activate# Mac/Linux မှာ activate လုပ်မယ်
$ source my_box/bin/activate
# ဒါမှမဟုတ် venv သုံးထားရင်
$ source venv/bin/activate(my_box) ဆိုပြီး ကွင်းလေးနဲ့ ပေါ်လာလိမ့်မယ်။ ဒါဆို ဘရို ပုံး ထဲ ရောက်သွားပြီ။
Step 3: Install Packages
# အခု (my_box) ထဲမှာ package install လုပ်မယ်
(my_box) $ pip install requests
# တခြား packages တွေလည်း ထည့်လို့ရပြီ
(my_box) $ pip install flask
(my_box) $ pip install numpyအဲ့ requests က venv A ပုံးထဲကိုပဲ ဝင်သွားတာ။ အပြင်က အိမ်ကြီး (Global) နဲ့ မဆိုင်တော့ဘူး။
Step 4: package တွေသိမ်းမယ်
ဘရိုက ဒီ project ကို သူငယ်ချင်းကို ပေးချင်တယ်။ Project ကဘာ package တွေ သုံးထားမှန်း မသိဘူး။
# Install လုပ်ထားတဲ့ packages စာရင်းတွေကို export လုပ်မယ်
(my_box) $ pip freeze > requirements.txt
# requirements.txt file ထဲမှာ package နာမည်နဲ့ version တွေ ရေးသွားပေးလိမ့်မယ်pip install -r requirements.txt နဲ့ တစ်ခါတည်း အကုန် install လုပ်လို့ရတယ်။
Step 5: ပုံး ကို ပိတ် မယ် (Deactivate)
# Virtual environment ကနေ ထွက်မယ်
(my_box) $ deactivate
# (my_box) ဆိုတာ ပျောက်သွားပြီး ပုံး ထဲက ပြန်ထွက်လာလိမ့်မယ်
$2. pipenv (နည်းနည်း Smart ဖြစ်တဲ့ ပုံး)
venv + pip ကို ပေါင်းထားတာ။ သူက requirements.txt ကို ကိုယ့်ဘာသာ manual မှတ်စရာမလိုဘူး။ သူ အလိုလို (automatic) မှတ်ပေးတယ်။
သူက Pipfile နဲ့ Pipfile.lock ဆိုတာကို သုံးတယ်။
- Pipfile = ဘာ package တွေ လိုချင်လဲ ဆိုတဲ့ စာရင်း။
- Pipfile.lock = ဘာ package တွေ အတိအကျ သုံးထားလဲ ဆိုတဲ့ သော့ (ဒါရှိရင် တခြားကွန်ပျူတာမှာ run လည်း ကွိုင် မတက်တော့ဘူး)။
Install လုပ်မယ်
# pipenv ကို install လုပ်မယ်
$ pip install pipenvသုံးနည်း
# Package install လုပ်မယ် (venv အလိုလို ဆောက်ပေးမယ်)
$ pipenv install requests
# Multiple packages install လုပ်မယ်
$ pipenv install flask numpy pandas
pipenv install requests လို့ ရိုက်လိုက်တာနဲ့...
- venv (ပုံး) ကို အလိုလို ဆောက်ပေးတယ်။
- requests ကို install လုပ်ပေးတယ်။
- Pipfile ထဲမှာ စာရင်း မှတ်ပေးတယ်။
Run တဲ့အခါ
# Virtual environment ထဲ ဝင်မယ်
$ pipenv shell
# မဟုတ်လည်း တိုက်ရိုက် run မယ်
$ pipenv run python app.py3. poetry (Pro version)
ဒါက Pro Level။ pipenv လိုပါပဲ။ ဒါပေမယ့် သူက package တွေကို သုံး တဲ့အဆင့်တင် မဟုတ်တော့ဘူး။ ကိုယ်တိုင် package တွေ ရေးမယ်၊ ဖြန့်မယ် (Publish to PyPI) ဆိုရင် poetry က တော်တော်အသုံးတည့်တာ။
- သူက pyproject.toml file ကို သုံးတယ်။ ဒါက လက်ရှိ Python လောကမှာ အသစ်ဆုံး standard။
- သူ့ရဲ့ dependency ဖြေရှင်းနည်း (ဘယ် package က ဘယ် version နဲ့မှ တည့် မလဲ ဆိုတာ) က pipenv ထက် ပို ကြမ်း တယ်၊ ပို တိကျ တယ်။
Install လုပ်မယ်
# poetry ကို install လုပ်မယ်
$ pip install poetryသုံးပုံကတော့
# New project စမယ်
$ poetry new my-project
# ရှိပြီးသား project မှာ poetry initialize လုပ်မယ်
$ poetry init
# Package add လုပ်မယ်
$ poetry add requests
# Development dependencies add လုပ်မယ်
$ poetry add --dev pytest
poetry add requests လို့ ရိုက်ရင် pipenv လိုပဲ အကုန် အလိုလို လုပ်ပေးသွားမယ်။
Run တဲ့အခါ
# Virtual environment ထဲ ဝင်မယ်
$ poetry shell
# မဟုတ်ရင် တိုက်ရိုက် run မယ်
$ poetry run python app.pyအနှစ်ချုပ်
ဘရိုက စ သင်နေတုန်းလား?
venv ကိုရွေး။
ဘာလို့လဲဆိုတော့ ဒါက အခြေခံကျတယ်။ Python မှာ အသင့် ပါပြီးသား။ activate လုပ်တာ၊ deactivate လုပ်တာ၊ requirements.txt ကို freeze လုပ်တာ... ဒီ flow ကို သဘောပေါက် သွားဖို့ အရေးကြီးတယ်။
Project နည်းနည်း ကြီးလာပြီး ပြီးတော့ Team နဲ့ လုပ်မှာဆို
pipenv ဒါမှမဟုတ် poetry ကို သုံး။
- pipenv က နားလည်ရ လွယ်တယ်။
- poetry က ပိုပြီး modern ဖြစ်တယ် powerful ဖြစ်တယ်။
Practical Example: Project Setup
Example Project Structure
my_web_project/
├── venv/ # Virtual environment folder
├── app.py # Main application file
├── requirements.txt # Package dependencies
└── README.md # Project documentationComplete Workflow Example
# 1. Project folder ဆောက်မယ်
$ mkdir my_web_project
$ cd my_web_project
# 2. Virtual environment ဆောက်မယ်
$ python -m venv venv
# 3. Activate လုပ်မယ်
$ venv\Scripts\activate # Windows
$ source venv/bin/activate # Mac/Linux
# 4. Packages install လုပ်မယ်
(venv) $ pip install flask
(venv) $ pip install requests
(venv) $ pip install python-dotenv
# 5. Requirements file ဆောက်မယ်
(venv) $ pip freeze > requirements.txt
# 6. Code ရေးမယ်
(venv) $ echo "print('Hello from virtual env!')" > app.py
# 7. Run မယ်
(venv) $ python app.py
# 8. အလုပ်ပြီးရင် deactivate လုပ်မယ်
(venv) $ deactivateQuick Command Reference
venv Commands
# Create virtual environment
python -m venv venv
# Activate (Windows)
venv\Scripts\activate
# Activate (Mac/Linux)
source venv/bin/activate
# Install package
pip install package_name
# Save dependencies
pip freeze > requirements.txt
# Install from requirements
pip install -r requirements.txt
# Deactivate
deactivatepipenv Commands
# Install pipenv
pip install pipenv
# Install package
pipenv install package_name
# Install dev dependency
pipenv install --dev package_name
# Install from Pipfile
pipenv install
# Activate shell
pipenv shell
# Run command
pipenv run python app.py
# Exit shell
exitpoetry Commands
# Install poetry
pip install poetry
# Create new project
poetry new project_name
# Initialize in existing project
poetry init
# Add package
poetry add package_name
# Add dev dependency
poetry add --dev package_name
# Install dependencies
poetry install
# Activate shell
poetry shell
# Run command
poetry run python app.pyအကြံပေးချင်တာက
- အမြဲ virtual environment သုံးပြီး project ရေးသင့်တယ် - Global installation ကို ရှောင်
- Project တစ်ခုစီအတွက် သီးခြား environment ရှိသင့် - Conflict မဖြစ်အောင်
- requirements.txt မေ့မထားနဲ့ - Team collaboration အတွက် အရေးကြီးတယ်
- .gitignore မှာ venv folder ထည့်ပါ - Git မှာ venv folder commit မလုပ်နဲ့
- Python version ရေး - README မှာ Python version ရေးထားပါ
Sample .gitignore
# Virtual Environment
venv/
env/
ENV/
# Python
__pycache__/
*.pyc
*.pyo
# IDE
.vscode/
.idea/
# Environment variables
.env