Python for AI/Functions, Modules ও Packages/Lesson 21
Virtual Environments
প্রতিটা project-এর জন্য আলাদা, পরিষ্কার Python environment — venv তৈরি ও activate, pip freeze, .gitignore, আর "আমার computer-এ তো চলে" সমস্যার সমাধান।
- সময়
- 18 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
ধরো তোমার computer-এ দুটো project:
- Project A (পুরনো thesis) — NumPy 1.26 লাগে
- Project B (নতুন RAG chatbot) — NumPy 2.1 লাগে
কিন্তু computer-এ Python একটাই। একটা install করলে আরেকটা ভাঙে।
Virtual environment (venv) হলো প্রতিটা project-এর জন্য একটা আলাদা, নিজস্ব Python "বাক্স" — নিজের package, নিজের version। একটার ভেতরে যা করো, অন্যটায় কোনো প্রভাব পড়ে না।
my-computer
|-- thesis/
| +-- .venv/ numpy 1.26, pandas 1.5
+-- rag-chatbot/
+-- .venv/ numpy 2.1, pandas 2.2, anthropic
কেন দরকার?
- সংঘাত এড়ানো — উপরের উদাহরণ।
- পরিষ্কার রাখা — global Python-এ সব project-এর package জমা হয়ে জগাখিচুড়ি হয় না।
- Reproducible — venv-এ শুধু project-এর দরকারি package থাকে, তাই
pip freezeদিয়ে সঠিক requirements.txt পাওয়া যায়। - "আমার computer-এ তো চলে!" — team-এর সবাই আর production server একই requirements থেকে একই environment বানায়।
venv তৈরি ও ব্যবহার
Python-এর সাথেই venv module আসে। Terminal-এ project folder-এ গিয়ে:
# ১. তৈরি করো (একবারই)
python -m venv .venv
# ২. activate করো — Linux / macOS
source .venv/bin/activate
# ২. activate করো — Windows (PowerShell)
.venv\Scripts\Activate.ps1
# ৩. এখন pip যা install করবে, সব .venv-এর ভেতরে যাবে
pip install numpy pandas
# ৪. কাজ শেষে
deactivate
Activate করলে terminal-এর prompt-এর শুরুতে (.venv) দেখাবে — বোঝা যায় এখন কোন environment-এ আছো।
সম্পূর্ণ workflow
নতুন project শুরু:
mkdir sentiment-analyzer && cd sentiment-analyzer
python -m venv .venv
source .venv/bin/activate
pip install pandas scikit-learn
pip freeze > requirements.txt
echo ".venv/" >> .gitignore
git init && git add . && git commit -m "Initial setup"
অন্য কেউ project clone করলে:
git clone <repo-url> && cd sentiment-analyzer
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
.venvfolder কখনো git-এ commit করবে না — এটা অনেক বড়, আর Windows-এ বানানো venv Linux-এ চলে না। Commit করো requirements.txt, আর.venv/রাখো.gitignore-এ।
Python থেকে environment চেনা
এই browser playground নিজেই একটা আলাদা, isolated Python environment (Pyodide) — তোমার computer-এর Python থেকে সম্পূর্ণ আলাদা।
venv-এর বাইরে: আরও tool
| Tool | কখন |
|---|---|
venv + pip | Python-এর সাথেই আসে — শেখা আর ছোট project-এর জন্য যথেষ্ট |
conda | Data science-এ জনপ্রিয়, Python-এর বাইরের library (যেমন CUDA)-ও সামলায় |
poetry / uv | আধুনিক tool — dependency lock, দ্রুত install। uv খুব দ্রুত জনপ্রিয় হচ্ছে |
| Docker | পুরো operating system সহ freeze — production deployment (DevOps module) |
শুরুতে venv দিয়েই অভ্যাস করো। ধারণাটা একই, tool বদলায়।
Exercise
Exercise
requirements.txt বানাও
freeze(packages) function লেখো। packages হলো একটা dictionary (নাম → version)। Return করবে requirements.txt-এর মতো একটা string:
- প্রতিটা লাইন
name==version - নাম অনুযায়ী বর্ণানুক্রমে sorted
- লাইনগুলো
\nদিয়ে জোড়া (শেষে\nনেই)
Quiz
Challenge
Challenge
দুটো environment-এর পার্থক্য
Developer-এর laptop-এ code চলে, server-এ চলে না। env_diff(local, server) function লেখো যেটা দুটো environment (নাম → version dictionary) তুলনা করে একটা dictionary return করে:
"missing"— local-এ আছে কিন্তু server-এ নেই, এমন package-এর sorted list"extra"— server-এ আছে কিন্তু local-এ নেই, sorted list"mismatch"— দুটোতেই আছে কিন্তু version আলাদা: dictionary, নাম →(local_version, server_version)
বাস্তবে কোথায় ব্যবহার হয়?
Challenge-এ তুমি যে env_diff বানালে, সেটা আসলে production-এর একটা সত্যিকারের debugging কৌশল। Model laptop-এ ঠিক prediction দেয় কিন্তু server-এ ভুল দেয় — প্রথম সন্দেহ: environment আলাদা।
একটা version-এ train করা scikit-learn model আরেক version-এ load করলে warning আসে, আর অনেক সময় চুপচাপ ভুল ফলাফল দেয়। MLOps module-এ দেখবো — এজন্যই model-এর সাথে তার environment-ও সংরক্ষণ করা হয় (MLflow, Docker)।
Interview প্রশ্ন
- Beginner: Virtual environment কী, আর কেন ব্যবহার করবে?
- Intermediate: requirements.txt আর lock file (যেমন
poetry.lock,uv.lock)-এর পার্থক্য কী? (Lock file transitive dependency সহ সবকিছুর হুবহু version রাখে।) - Advanced: venv আর Docker — দুটোই isolation দেয়। কখন venv যথেষ্ট, আর কখন Docker লাগবে?
এরপর কী?
অভিনন্দন! 🎉 Functions, Modules ও Packages module শেষ। তুমি এখন flexible function লিখতে পারো, অন্যের library ব্যবহার করতে পারো, আর project-কে পেশাদারভাবে সাজাতে পারো।
পরের module: Object-Oriented Programming — class আর object। PyTorch-এ প্রতিটা model একটা class, scikit-learn-এর প্রতিটা model একটা object। OOP না বুঝলে এগুলোর code পড়া কঠিন।