পাঠ ২২ · ২৫-এর মধ্যে · মডিউল ৩
Home / AI Courses / AI-এর জন্য Python / virtualenv ও pip

virtualenv ও pip

virtualenv & pip — isolated Python projects
৬ মিনিট পড়া শুরু · Beginner command-line

এই পাঠে যা শিখবেন

  • "Dependency hell" কী — কেন venv দরকার
  • venv বানানো, activate, deactivate
  • pip install, pip list, pip freeze
  • requirements.txt দিয়ে reproducible setup
  • conda কখন বেছে নেবেন
  • আধুনিক tool — poetry, uv — সংক্ষেপে

১ · কেন virtual environment?

আপনি দু'টি প্রজেক্টে কাজ করছেন। Project A — TensorFlow ২.১০, NumPy ১.২৩। Project B — TensorFlow ২.১৬, NumPy ১.২৬। দু'টি একই Python install-এ থাকতে পারে না — version conflict। সমাধান: প্রতিটি প্রজেক্টের জন্য আলাদা virtual environmentVirtual environmentএকটি isolated directory যেখানে নিজস্ব Python interpreter ও site-packages। Activate করলে — সেই environment-এর Python ও package-ই active। Project switch-এ deactivate ও অন্যটা activate।। এক প্রজেক্টের package অন্যটাকে প্রভাবিত করবে না।

Dependency Hell — তিনটি classic সমস্যা

১) Version conflict: একই package-এর দু'টি version দু'টি প্রজেক্টে লাগে।
২) Global pollution: system Python-এ ১০০+ package — কোনটা কোন project-এর, ভুলে যাওয়া।
৩) Reproducibility: "আমার machine-এ কাজ করছে" — colleague-এর machine-এ ভেঙে যায়।

Virtual environment = প্রতিটি প্রজেক্টের জন্য আলাদা রান্নাঘর। কাঁচামাল (package) আলাদা শেলফে। এক রান্নাঘরে আদা ১ কেজি, অন্যটায় ২০০ গ্রাম — কোনো মিশ্রিত হবে না। System Python = বাড়ির main pantry — সেখানে শুধু সর্বজনীন basics।

২ · venv বানানো ও ব্যবহার

Python ৩.৩+ এ venv built-in। কোনো install লাগে না। Project folder-এ গিয়ে:

Terminal · venv
# (১) Project folder-এ যান
mkdir my_ml_project
cd my_ml_project

# (২) venv বানান — .venv নাম convention
python -m venv .venv

# (৩) Activate করুন
# Linux / macOS:
source .venv/bin/activate

# Windows (PowerShell):
.venv\Scripts\Activate.ps1

# Windows (cmd):
.venv\Scripts\activate.bat

# (৪) prompt-এ (.venv) prefix দেখাবে — active নিশ্চিত
which python      # .venv-এর ভিতরে point করবে
python -V         # version

# (৫) কাজ শেষে
deactivate
Folder নাম .venv dotted — hidden, IDE auto-detect, git ignore সহজ। venv, env নামও দেখা যায় কিন্তু .venv Python community-র ২০২২+ standard।

৩ · pip — package install ও manage

pippip"Pip Installs Packages" — Python-এর default package manager। PyPI (Python Package Index)-এর ৫,০০,০০০+ package ঘর-বাড়ি। Python ৩.৪+ এ pre-installed। = Python Package Index (PyPI)-এর ৫ লক্ষ+ package ডাউনলোড ও install-এর tool। venv active থাকলে — pip শুধু সেই venv-এ install।

Terminal · pip basics
# Install — একটি package
pip install numpy

# Specific version
pip install "numpy==1.26.4"

# Range — নিরাপদ practice
pip install "numpy>=1.26,<2.0"

# Multiple একসাথে
pip install pandas matplotlib seaborn scikit-learn

# Upgrade
pip install --upgrade numpy

# List installed
pip list

# Detail of one package
pip show numpy

# Uninstall
pip uninstall numpy

# pip নিজেকে upgrade
python -m pip install --upgrade pip

৪ · requirements.txt — reproducible setup

Project share করার সময় — অন্যজন কীভাবে একই environment build করবে? requirements.txt-এ exact version লিখে রাখুন।

Terminal · freeze & restore
# (১) Current venv-এর package list ফাইল-এ
pip freeze > requirements.txt

# requirements.txt দেখতে এমন:
#   numpy==1.26.4
#   pandas==2.2.0
#   scikit-learn==1.4.0

# (২) অন্যজন (বা CI/Docker) — same setup
python -m venv .venv
source .venv/bin/activate    # বা Windows-এ Activate.ps1
pip install -r requirements.txt

# (৩) Curated version — top-level dependency only
# requirements.txt-এ লিখুন শুধু যা প্রয়োজন:
#   numpy
#   pandas>=2.0
#   scikit-learn
#   jupyterlab
# তারপর `pip install -r requirements.txt`
pip freeze সব transitive dependency সহ লেখে — ৫০-১০০ লাইন। Manual requirements.txt-এ শুধু top-level package রাখুন। সম্পূর্ণ reproducibility-র জন্য pip-compile (pip-tools) বা poetry/uv-র lock file।

৫ · .gitignore-এ venv

.venv/ folder-এ MB-GB জুড়ে binary — git-এ commit করবেন না। প্রকল্পের .gitignore-এ যোগ করুন:

.gitignore
# Python
__pycache__/
*.py[cod]
*$py.class

# Environment
.venv/
venv/
env/

# Jupyter
.ipynb_checkpoints/

# Secrets
.env
*.key

# Data (case-by-case)
data/raw/
*.csv.gz
Python environment — lifecycle ও isolation create → activate → install → freeze → reproduce System Python /usr/bin/python3 untouched, clean python -m venv .venv .venv/ directory isolated copy activate (.venv) prompt PATH switched pip install numpy pandas scikit-learn .venv/lib/python3.x/site-packages/ শুধু এই environment-এ install pip freeze > requirements.txt numpy==1.26.4 / pandas==2.2.0 / ... অন্য machine / colleague / CI / Docker git clone → python -m venv .venv → activate → pip install -r requirements.txt → same environment, same code, same result
venv lifecycle — system Python untouched, project isolation, requirements.txt-এ reproducibility।

৬ · conda — data science ecosystem

condacondaAnaconda Inc.-এর package + environment manager (২০১২)। Python-এর বাইরের C/C++/Fortran library handle (NumPy-র BLAS, OpenCV-র native code)। Miniconda — minimal install; Anaconda — ২৫০+ package pre-bundled। — pip-এর alternative। Python + non-Python (C/C++/CUDA) library একসাথে handle। Heavy data science (TensorFlow GPU, OpenCV, RAPIDS) — conda-তে সহজ।

Terminal · conda
# Miniconda install — যেকোনো OS-এ
# https://docs.conda.io/en/latest/miniconda.html

# নতুন env বানানো — Python version সহ
conda create -n ml python=3.11

# Activate
conda activate ml

# Package install — conda বা pip দু'টোই
conda install numpy pandas scikit-learn jupyterlab
pip install seaborn   # PyPI থেকে যা conda-তে নেই

# List
conda list

# Save
conda env export > environment.yml

# Restore
conda env create -f environment.yml

# Deactivate
conda deactivate

৭ · আধুনিক tool — poetry, uv

  • poetry (২০১৮): dependency resolution + lock file + publish workflow। pyproject.toml standard। Library author-দের প্রিয়।
  • pdm: poetry-র মতো, PEP 582 support।
  • uv (Astral, ২০২৪): Rust-এ লেখা। pip-এর চেয়ে ১০-১০০× faster। venv + pip + pip-tools একই tool-এ। ২০২৬-এ rapidly adopt হচ্ছে।
Terminal · uv (modern)
# Install uv (একবার)
curl -LsSf https://astral.sh/uv/install.sh | sh
# (Windows: PowerShell-এ winget বা irm script)

# নতুন প্রজেক্ট
uv init my_project
cd my_project

# venv + dependency lock — এক command-এ
uv add numpy pandas scikit-learn

# Run script (auto-activate venv)
uv run python my_script.py

# Lock file — uv.lock auto-generated; reproducible
২০২৬-এ নতুন প্রজেক্ট শুরু করলে — uv recommended। But venv + pip এখনো বহু prod system-এ; দু'টোই জানা ভাল।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ "Dependency hell" — ২০ বছরের পুরোনো সমস্যা। npm, Maven, Cargo — অন্য language-এ কীভাবে solve করা হয়েছে? Python কেন এত behind ছিল, এখন uv কেন এত excitement?

প্রতিটি programming language-এর dependency management-এর ইতিহাস — মূলত compromise-এর গল্প। Python ২০ বছরে ৭-৮টি tool-এর যুগ পেরিয়েছে। অন্য language-এর কাছ থেকে কী শেখা যায়?

অন্য ecosystem-এর সমাধান:

  • npm (Node.js, ২০১০): প্রতিটি project-এ node_modules/ — local install by default। Lock file (package-lock.json) reproducible। নেতিবাচক — duplicate dependency, GB-scale folder।
  • Cargo (Rust, ২০১৫): Cargo.toml + Cargo.lock। Single binary, dependency resolution mathematically sound। Rust-এর সবচেয়ে loved feature।
  • Go modules (২০১৯): go.mod + go.sum। Import path = source URL। সরল, যদিও late।
  • Maven (Java): XML-driven, repository-centric। Heavy কিন্তু rock-solid enterprise-এ।
  • Bundler (Ruby, ২০১০): Gemfile + Gemfile.lock — modern lock-file pioneer।

Python-এর historical চ্যালেঞ্জ:

  • Backward compat: ১৯৯১-এ designed Python — package management ১০ বছর পরে যোগ। Retrofit কঠিন।
  • C extensions: NumPy, SciPy, OpenCV — pure Python নয়। Binary wheel build OS/architecture-specific।
  • Installation site: System Python, user, venv — তিন level conflict।
  • Tool fragmentation: distutils → setuptools → pip → pipenv → poetry → pdm → uv। Standard ছিল না।
  • No lock file standard: requirements.txt incomplete; pip-tools, poetry, conda প্রতিটি own format।

২০১৫-২০২৩ improvements:

  • PEP 517/518 — pyproject.toml standard build config।
  • PEP 621 — project metadata standardized।
  • pip-tools — lock file capability।
  • poetry — modern UX।
  • conda — non-Python dependency।

uv কেন breakthrough (২০২৪):

  • Speed: Rust-এ written, parallel install। pip-এর ১০-১০০×। ১ minute install ১ second-এ।
  • Unified tool: venv + pip + pip-tools + virtualenv + pipx — একটি tool।
  • Resolver correctness: SAT-solver-based, modern algorithm।
  • Python install too: uv python install 3.12 — pyenv-এর কাজও।
  • pip-compatible: existing requirements.txt কাজ করে। Drop-in replacement।
  • Astral team: Ruff (linter)-এর creator — track record।

২০২৬-এ Python ecosystem এর state:

  • uv rapidly adopted — major libraries CI-তে switching।
  • poetry এখনো library author-দের জন্য ভাল।
  • pip + venv → "default low-tech" থাকবে।
  • conda — heavy data science niche।
  • pyenv, pipenv — declining।

Python-এর strategic পাঠ:

  • Tool fragmentation = community innovation, কিন্তু adoption বিভ্রান্তি।
  • Performance matter বেশি — uv-এর success সেটার প্রমাণ।
  • Standard slowly emerge — PEP-এর ধীর কিন্তু ক্যানোনিকাল।
  • Inclusive tool wins — pip-compat = adoption সহজ।

মূল উপলব্ধি: Dependency management = software engineering-এর hardest unsolved problem (Russ Cox)। Python ২০ বছরে শিখেছে; uv-এর সাফল্য — speed + simplicity + standard compatibility। ২০২৬-এ নতুন প্রজেক্ট শুরু করলে — uv বেছে নিন; পুরোনো প্রজেক্টে — pip + venv ঠিক আছে। Tool বদলায়, principle (isolation, lock-file, reproducibility) থাকে।

প্র ০২ requirements.txt বনাম poetry.lock বনাম conda environment.yml — তিন format-এর pros/cons। কোন প্রজেক্টে কোনটা?

Reproducibility = ML production-এর foundation। কিন্তু "reproducible" শব্দটির মানে subtle। তিনটি format — তিন ধরনের reproducibility offer।

(১) requirements.txt — pip-এর native:

  • Format: এক লাইনে এক package (numpy==1.26.4)।
  • Pros:
    • সর্বজনীন — pip আছে সব Python install-এ।
    • সরল — text ফাইল, edit-friendly।
    • CI/Docker integration trivial।
    • Public knowledge — সব Python developer বুঝে।
  • Cons:
    • Platform-specific binary (Linux vs Mac vs Windows wheel) handle করে না।
    • Resolver ছাড়া — transitive dependency conflict অলক্ষিত।
    • Manual freeze: top-level package + transitive মেশানো।
    • Hash verification optional — security risk।
  • Best for: simple project, education, open-source library।

(২) poetry.lock (বা pdm.lock, uv.lock):

  • Format: JSON/TOML — exact resolved tree, hash, source URL।
  • Pros:
    • Deterministic resolution — bit-by-bit reproducible।
    • Multi-platform — Linux/Mac/Windows separate metadata।
    • Hash verification — supply chain security।
    • Top-level vs transitive — পরিষ্কার।
    • Add/remove command-line — manual edit লাগে না।
  • Cons:
    • Tool install — extra step।
    • Format opinionated — switching tool কষ্টকর।
    • poetry-র resolver সময় বেশি নেয় (uv-তে দ্রুত)।
  • Best for: production application, library publishing, team collaboration।

(৩) conda environment.yml:

  • Format: YAML — channel + package + Python version + non-Python (CUDA, MKL)।
  • Pros:
    • Non-Python dependency handle (R, GDAL, FFmpeg, CUDA toolkit)।
    • Cross-platform — Windows/Linux/Mac একই file।
    • Heavy data science package binary — pre-built।
    • Channel concept — conda-forge, bioconda — community-curated।
  • Cons:
    • Bigger install (Anaconda ~৩GB)।
    • Slower than pip।
    • conda-forge ecosystem PyPI-এর চেয়ে ছোট — সব package নেই।
    • License (Anaconda Inc. — commercial use এ subscription)।
    • environment.yml-এ pinned version exactness inconsistent।
  • Best for: heavy data science (PyTorch CUDA, RAPIDS), bioinformatics, geospatial, mixed-language project।

সিদ্ধান্ত matrix:

  • Library on PyPI publish → poetry/pdm + pyproject.toml।
  • Web app, ML service prod → poetry.lock বা uv.lock।
  • Quick research notebook → requirements.txt।
  • GPU DL training → conda (CUDA convenience)।
  • Academic reproducibility → conda environment.yml + Docker।
  • Open-source teaching → requirements.txt (universal)।

Hybrid approach:

  • conda — base environment (Python, CUDA)।
  • pip — Python package (PyPI > conda-forge)।
  • pip-tools বা uv — locking।
  • একসাথে use — common practice production-এ।

Reproducibility levels:

  1. Level 1: requirements.txt — "মোটামুটি একই"।
  2. Level 2: lock file (poetry/uv) — "exact same Python tree"।
  3. Level 3: Docker image — "exact same OS + Python tree"।
  4. Level 4: Hash-pinned requirements.txt + Docker — supply chain secure।

মূল উপলব্ধি: "Reproducible" শব্দে ৪টি স্তর — যা প্রজেক্টের stake-এর সাথে match করুন। Open-source tutorial — Level 1 যথেষ্ট। Production ML — Level 2-3। Healthcare/financial — Level 4। Tool-এর গুরুত্ব কম, structured discipline-এর গুরুত্ব বেশি।

প্র ০৩ Production ML deployment-এ Docker কেন venv-এর চেয়ে preferred? Python application docker image build-এর best practice কী — multi-stage build, slim base, layer caching?

venv = Python isolation। Docker = OS isolation। Production deployment-এ Docker the gold standard — কারণ Python alone দিয়ে full reproducibility অসম্ভব।

venv-এর সীমা:

  • OS-level dependency (libpng, ffmpeg, CUDA driver) handle করে না।
  • Python version explicit না — system python-এর উপর dependent।
  • Server config (env var, file system) capture না।
  • Runtime কারো ১০টি OS package install করতে হবে — manual error-prone।

Docker কী solve করে:

  • Base OS, Python version, system library, app code, environment — সব বুদ্ধিদীপ্ত image-এ।
  • "Build once, run anywhere" — কোনো laptop থেকে production server পর্যন্ত।
  • Versioned (tag): my-ml:v1.2.3।
  • Rollback trivial — পুরোনো tag pull।
  • K8s-native — Pod spec-এ image।

Best practice — minimal Dockerfile:

# Stage 1 — build
FROM python:3.11-slim AS builder
WORKDIR /app

# OS dependency (compile-time)
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential gcc \
    && rm -rf /var/lib/apt/lists/*

# Python deps — separate layer for caching
COPY requirements.txt .
RUN pip install --no-cache-dir --user -r requirements.txt

# Stage 2 — runtime (slim)
FROM python:3.11-slim
WORKDIR /app

# শুধু installed package copy — build tool বাদ
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH

# App code (last layer — frequently change)
COPY src/ ./src/

# Non-root user — security
RUN useradd -m mluser && chown -R mluser /app
USER mluser

EXPOSE 8000
CMD ["python", "src/app.py"]

Best practice principles:

(১) Multi-stage build:

  • Build stage — compiler, dev library, build artifact।
  • Runtime stage — শুধু compiled binary। ৫০-৮০% image size কমে।

(২) Slim/Alpine base:

  • python:3.11-slim — ১২৫MB। python:3.11 — ১GB।
  • Alpine আরও ছোট কিন্তু glibc difference — NumPy, scikit-learn-এ build issue। Slim-ই recommended।

(৩) Layer caching:

  • requirements.txt আগে copy ও install — code change-এ pip install rerun হবে না।
  • App code শেষে — frequently change, ছোট layer।
  • একই layer-এ apt-get update && apt-get install — cache problem এড়ান।

(৪) .dockerignore:

# .dockerignore
.git/
.venv/
__pycache__/
*.pyc
.pytest_cache/
data/
notebooks/
.env

(৫) Security:

  • Non-root user।
  • Pinned base image tag (3.11-slim not 3-slim)।
  • SHA256 digest pin: FROM python@sha256:...
  • Secret in env var, never bake-in।
  • trivy বা snyk — CVE scan।

(৬) Size optimization:

  • --no-cache-dir pip install-এ।
  • Combine apt commands, clean apt list।
  • Heavy ML — ONNX/quantize model।
  • distroless image — extreme minimal।

(৭) GPU image:

  • Base: nvidia/cuda:12.1-runtime-ubuntu22.04 + Python install।
  • Or: PyTorch official pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime।
  • nvidia-container-toolkit host-এ।

Common ভুল:

  • Whole repo COPY — secret leak, big image।
  • RUN apt-get update + RUN apt-get install separate — old cache used।
  • Latest tag — non-reproducible।
  • requirements.txt-এ unpinned — build-by-build difference।
  • Root user — security exposure।

Modern alternatives:

  • nix: functional deterministic build।
  • Bazel/Buck: hermetic build for very large repo।
  • devcontainer.json: VS Code dev environment in container।
  • distroless: Google-র minimal images।

মূল উপলব্ধি: venv = development tool। Docker = deployment tool। ML production-এ — Docker without exception। Multi-stage + slim + layer caching — image ১GB থেকে ১০০MB। Build time ১০ minute থেকে ৩০ second। Production ML engineer-এর জন্য — Docker fluency mandatory।

প্র ০৪ Supply-chain attack — typo-squatting, malicious package, dependency confusion। PyPI-এ এই attack কীভাবে ঘটে? রক্ষার strategy কী — pin, hash, lock, audit?

২০১৭ থেকে — বছরে শত-শত malicious package PyPI/npm-এ পাওয়া যায়। One pip install-এ আপনার machine compromised — secret stolen, crypto miner, ransomware। ML developer-রা বিশেষভাবে target — ডেটা + compute + token।

সাধারণ attack vector:

(১) Typo-squatting:

  • Real: numpy। Fake: numpi, nummpy, nunpy।
  • Real: tensorflow। Fake: tensorfllow, tensoflow।
  • One typo install → arbitrary code execution।
  • ২০১৭ "pyrequest" (vs requests) — bitcoin stealing।
  • ২০২০ "dateutils" (vs python-dateutil) — credential exfiltration।

(২) Dependency confusion:

  • Internal company package company_utils। Public PyPI-এ একই নাম, higher version। pip default-এ public-কে prefer।
  • ২০২১ Alex Birsan — Apple, Microsoft, PayPal-এ এই attack POC।

(৩) Maintainer takeover:

  • Old package maintainer abandon → attacker email pretend → access।
  • "event-stream" npm (২০১৮) — bitcoin wallet steal।
  • colors npm (২০২২) — maintainer নিজেই corrupt code push।

(৪) Compromised CI/CD:

  • GitHub Actions secret leak → automated malicious release।
  • SolarWinds attack (২০২০) — supply chain gold standard fear।

(৫) Post-install script:

  • setup.py-এ arbitrary code → install time-এ run।
  • pip install = arbitrary code execution। Don't install random package।

রক্ষার strategy:

(১) Version pin + hash:

# requirements.txt with hash
numpy==1.26.4 \
    --hash=sha256:9...abcd \
    --hash=sha256:5...wxyz

# pip-compile --generate-hashes-এ auto
  • Hash mismatch → install fail।
  • Tampered package detect।

(২) Lock file:

  • poetry.lock, uv.lock — exact tree।
  • Transitive dependency-ও pin।

(৩) Private index:

  • Internal package internal index-এ।
  • pip install --index-url=https://internal.pypi/
  • Dependency confusion এড়ানো।

(৪) Audit tools:

  • pip-audit — known vulnerability check।
  • safety check — CVE scan।
  • snyk — premium scanner।
  • GitHub Dependabot — auto PR for updates।

(৫) Sandboxing:

  • Untrusted package — Docker container।
  • Production secret never in dev environment।
  • Least privilege — application-specific role।

(৬) Verify before install:

  • Package name carefully spell।
  • PyPI page check — release count, github star, last update।
  • "Sponsored" search result থেকে install না।
  • Suspicious — package size 5KB (no real code) → suspicious।

(৭) PyPI 2FA mandatory (২০২৪+):

  • Top maintainer-দের forced 2FA।
  • Trusted publishing (OIDC) — CI থেকে keyless publish।

(৮) SBOM (Software Bill of Materials):

  • Project-এর exact dependency tree document।
  • CycloneDX, SPDX format।
  • Compliance + incident response।

Real incident — কী থেকে শিখি:

  • ২০২৩ pytorch-nightly dependency confusion — torchtriton package compromised।
  • ২০২৪ ultralytics (YOLO) — crypto miner injected।
  • প্রতিবছর ৫-১০টি public ML library affected।

ML-specific risk:

  • Model file (pickle) — arbitrary code on load। Use safetensors বা ONNX।
  • Pretrained weight from random source — backdoor possible।
  • Hugging Face Hub — verify maintainer।
  • Notebook থেকে copy-paste install — typo বেশি।

সম্পূর্ণ defense layered approach:

  1. Trusted source only (PyPI verified, big maintainer)।
  2. Pinned + hash-locked requirements।
  3. pip-audit / Dependabot auto।
  4. Private index-এ internal package।
  5. 2FA + signed commit on publishing।
  6. Production isolated network।
  7. Regular SBOM review।

মূল উপলব্ধি: "pip install foo" = arbitrary code execution। ML developer-এর responsibility — যা install করছেন, যাচাই। ১% extra effort = ১০০× incident cost কম। Tooling helps, কিন্তু human judgment irreplaceable। সাবধানতা = professional habit।

অনুশীলন

  1. প্রজেক্ট তৈরি: নতুন folder iris_project বানান। venv তৈরি করুন, activate করুন, pandas + scikit-learn install করুন। requirements.txt generate করুন।
    mkdir iris_project && cd iris_project
    python -m venv .venv
    
    # Linux/Mac
    source .venv/bin/activate
    # Windows
    # .venv\Scripts\Activate.ps1
    
    pip install pandas scikit-learn jupyter
    pip freeze > requirements.txt
    cat requirements.txt
  2. Reproduce: উপরের project delete করুন (rm -rf .venv)। requirements.txt দিয়ে নতুন venv বানিয়ে restore করুন।
    rm -rf .venv
    python -m venv .venv
    source .venv/bin/activate    # Windows-এ Activate.ps1
    pip install -r requirements.txt
    pip list   # verify
  3. uv try করুন: uv install করুন এবং uv add দিয়ে একই package install — pip-এর তুলনায় কত দ্রুত?
    # uv install (Linux/Mac)
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    # নতুন project
    mkdir test_uv && cd test_uv
    uv init
    time uv add pandas scikit-learn jupyter
    
    # Compare with pip:
    # rm -rf ..venv && python -m venv .venv && source .venv/bin/activate && time pip install pandas scikit-learn jupyter

    সাধারণত uv ১০-৫০× দ্রুত। বড় package (PyTorch CUDA) — পার্থক্য আরো বেশি।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

Colab-এ venv দরকার? Colab-এ প্রতিটি runtime নিজেই isolated VM — venv-এর প্রয়োজন কম। কিন্তু custom Python version বা lock-file-based install-এ !pip install -r requirements.txt চালান।
পূর্ববর্তী পাঠ
পাঠ ২১ · EDA — Iris ডেটাসেটে