মূল content-এ যাও

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

.venv folder কখনো git-এ commit করবে না — এটা অনেক বড়, আর Windows-এ বানানো venv Linux-এ চলে না। Commit করো requirements.txt, আর .venv/ রাখো .gitignore-এ।

Python থেকে environment চেনা

main.py

এই browser playground নিজেই একটা আলাদা, isolated Python environment (Pyodide) — তোমার computer-এর Python থেকে সম্পূর্ণ আলাদা।

venv-এর বাইরে: আরও tool

Toolকখন
venv + pipPython-এর সাথেই আসে — শেখা আর ছোট project-এর জন্য যথেষ্ট
condaData 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 বানাও

+20 XP

freeze(packages) function লেখো। packages হলো একটা dictionary (নাম → version)। Return করবে requirements.txt-এর মতো একটা string:

  • প্রতিটা লাইন name==version
  • নাম অনুযায়ী বর্ণানুক্রমে sorted
  • লাইনগুলো \n দিয়ে জোড়া (শেষে \n নেই)
solution.py

Quiz

  1. Q1Virtual environment মূলত কোন সমস্যার সমাধান করে?
  2. Q2.venv folder কি git-এ commit করা উচিত?
  3. Q3Python code থেকে কীভাবে বুঝবে এটা virtual environment-এর ভেতরে চলছে?
0/3 answered

Challenge

Challenge

দুটো environment-এর পার্থক্য

+50 XP

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)
solution.py

বাস্তবে কোথায় ব্যবহার হয়?

Challenge-এ তুমি যে env_diff বানালে, সেটা আসলে production-এর একটা সত্যিকারের debugging কৌশল। Model laptop-এ ঠিক prediction দেয় কিন্তু server-এ ভুল দেয় — প্রথম সন্দেহ: environment আলাদা।

main.py

একটা 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 পড়া কঠিন।