পরিবেশ তৈরি ও প্রথম Project

Python, uv, VS Code, Git দিয়ে প্রথম project হাতে বানানো

রোডম্যাপের মাস ১পড়তে প্রায় ১৫ মিনিট

Flutter এ কাজ শুরু করার আগে যেমন Flutter SDK, Android Studio আর emulator ঠিক করতে হয়, Python এও তেমনি আগে কাজের জায়গা গুছিয়ে নিতে হয়। এই অধ্যায়ে আমরা এমন একটা setup বানাবো যেটা দিয়ে পুরো ১২ মাস চলবে। ছোট script থেকে শুরু করে বড় FastAPI project পর্যন্ত সব এখানেই হবে।

#এই অধ্যায়ে যা করবে

  • Python আর uv install করবে (uv হলো Python এর আধুনিক package manager, Flutter এর flutter pub এর মতো)
  • VS Code এ Python এর জন্য দরকারি extension বসাবে
  • প্রথম project তৈরি করবে, চালাবে, আর বুঝবে কোন file কেন আছে
  • Git দিয়ে project save করে GitHub এ তুলবে

#Python, uv আর virtual environment: আগে ধারণাটা বুঝি

Python project এ তিনটা জিনিস আলাদা করে বোঝা দরকার:

  1. Python interpreter: যে program তোমার .py file পড়ে চালায়। Flutter এ যেমন Dart SDK।
  2. Package: অন্যের লেখা library, যেমন fastapi, httpx। Flutter এ যেমন dio, provider।
  3. Virtual environment (venv): প্রতিটা project এর নিজস্ব আলাদা ঘর, যেখানে সেই project এর package গুলো থাকে।

Virtual environment কেন লাগে? ধরো Project A তে fastapi এর পুরনো version লাগে, Project B তে নতুন। সব package যদি computer এর এক জায়গায় install হয়, তাহলে একটা আরেকটাকে ভেঙে দেবে। তাই প্রতিটা project এর জন্য আলাদা .venv folder থাকে।

তোমার Mac Python interpreter uv দিয়ে install করা expense-tracker/ .venv → fastapi 0.115, httpx notes-api/ .venv → fastapi 0.120, sqlalchemy, redis
একই Python, কিন্তু প্রতিটা project এর package আলাদা ঘরে। একটা project আরেকটাকে ভাঙতে পারে না।

আগে এই কাজের জন্য pip, venv, pyenv, poetry এর মতো অনেকগুলো tool আলাদা করে লাগতো। এখন uv একাই সব করে: Python install করে, venv বানায়, package install করে, আর খুব দ্রুত। আমরা পুরো course এ uv ব্যবহার করবো।

কাজ Flutter এ Python (uv) এ
নতুন project flutter create app uv init app
Package যোগ flutter pub add dio uv add httpx
Package list এর file pubspec.yaml pyproject.toml
Lock file pubspec.lock uv.lock
চালানো flutter run uv run main.py

#ধাপ ১: uv আর Python install

Mac এ Terminal খুলে:

Terminal
# uv install (Homebrew থাকলে)
brew install uv

# অথবা official installer দিয়ে
curl -LsSf https://astral.sh/uv/install.sh | sh

# ঠিকমতো install হয়েছে কিনা দেখো
uv --version

# Python install (uv নিজেই নামিয়ে আনবে)
uv python install 3.13
uv python list

#ধাপ ২: VS Code ঠিক করা

VS Code এ এই extension গুলো install করো:

  • Python (Microsoft): Python চালানো, debug করা
  • Pylance: auto-complete আর type check
  • Ruff: code format আর ভুল ধরা (Flutter এ যেমন dart format আর analyzer)

তারপর VS Code এর settings (Cmd + , → উপরে ডানে {} icon) এ এটা যোগ করো:

JSON
{
  "[python]": {
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.formatOnSave": true
  },
  "python.analysis.typeCheckingMode": "standard"
}

এখন file save করলেই code সুন্দর করে সাজানো হবে, আর type এর ভুল লাল দাগ দিয়ে দেখাবে।

#ধাপ ৩: প্রথম project তৈরি

Terminal
mkdir -p ~/code && cd ~/code
uv init hello-python
cd hello-python
ls -la

uv এই file গুলো বানাবে:

Text
hello-python/
├── .git/              ← Git repo (uv নিজেই init করে)
├── .gitignore         ← কোন file Git এ যাবে না
├── .python-version    ← এই project কোন Python version ব্যবহার করবে
├── README.md
├── main.py            ← তোমার code
└── pyproject.toml     ← project এর পরিচয় আর package list

pyproject.toml খুলে দেখো:

TOML
[project]
name = "hello-python"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = []

এটা Flutter এর pubspec.yaml এর মতো। dependencies এর ভেতরে package এর নাম জমা হবে।

এখন চালাও:

Terminal
uv run main.py

প্রথমবার চালালে uv নিজেই .venv folder বানাবে, তারপর main.py চালাবে। Output আসবে Hello from hello-python!

#ধাপ ৪: Package যোগ করা

একটা আসল কাজ করি: internet থেকে data আনি। এর জন্য httpx package লাগবে (Flutter এর http বা dio এর মতো)।

Terminal
uv add httpx

এখন pyproject.toml এ dependencies = ["httpx>=0.28.1"] এর মতো কিছু দেখবে, আর একটা uv.lock file তৈরি হবে। main.py বদলে লেখো:

Python
import httpx


def main() -> None:
    # একটা free public API থেকে data আনছি
    response = httpx.get("https://api.github.com/repos/python/cpython")
    data = response.json()

    print(f"Repo: {data['full_name']}")
    print(f"Star: {data['stargazers_count']:,}")
    print(f"Language: {data['language']}")


if __name__ == "__main__":
    main()
Terminal
uv run main.py

#Development এর জন্য আলাদা package

কিছু package শুধু তোমার কাজের সময় লাগে, production server এ লাগে না। যেমন test চালানোর pytest আর code check করার ruff:

Terminal
uv add --dev pytest ruff

এগুলো pyproject.toml এ আলাদা [dependency-groups] অংশে যাবে।

#অন্য কারও project চালানো

GitHub থেকে কারও Python project নামালে শুধু এটা চালাও:

Terminal
uv sync      # uv.lock দেখে হুবহু একই version এর সব package install করবে
uv run main.py

Flutter এ flutter pub get এর মতো।

#ধাপ ৫: Git আর GitHub

তুমি Flutter এ Git ব্যবহার করো, তাই এখানে শুধু Python এর জন্য যা আলাদা সেটা দেখি। uv এর বানানো .gitignore এ .venv আছে কিনা দেখো। .venv কখনো Git এ যাবে না, কারণ এটা যে কেউ uv sync দিয়ে আবার বানাতে পারে।

Terminal
git add .
git commit -m "প্রথম Python project"

# GitHub এ repo বানিয়ে push (gh CLI থাকলে)
gh repo create hello-python --public --source=. --push

#ধাপ ৬: learning-journey repo

পুরো ১২ মাসের জন্য একটা আলাদা repo খোলো:

Terminal
cd ~/code
uv init learning-journey
cd learning-journey
mkdir notes
echo "# আমার ১২ মাসের যাত্রা" > README.md

প্রতি সপ্তাহে notes/ এ একটা file লিখবে, যেমন notes/month-01-week-1.md: কী শিখলে, কোথায় আটকালে, কী বানালে। এক বছর পর এটাই তোমার সবচেয়ে বড় portfolio হবে, কারণ এখানে দেখা যাবে তুমি নিয়মিত শিখেছো।

#Interactive Python: দ্রুত কিছু পরীক্ষা করা

ছোট কিছু test করতে পুরো file লেখার দরকার নেই:

Terminal
uv run python
Python
>>> 2 ** 10
1024
>>> "bangla".upper()
'BANGLA'
>>> exit()

আরও সুন্দর অভিজ্ঞতার জন্য uv add --dev ipython করে uv run ipython চালাতে পারো (রঙিন output, auto-complete)।

#সাধারণ সমস্যা ও সমাধান

সমস্যা কারণ সমাধান
command not found: uv Terminal PATH আপডেট হয়নি Terminal বন্ধ করে আবার খোলো
VS Code বলছে Import "httpx" could not be resolved VS Code ভুল Python দেখছে Cmd+Shift+P → "Python: Select Interpreter" → project এর .venv বেছে নাও
ModuleNotFoundError Package install হয়নি বা uv run ছাড়া চালিয়েছো uv add <package> করো, আর সবসময় uv run দিয়ে চালাও

#অনুশীলন

#নিজেকে যাচাই করো

Virtual environment না থাকলে কী সমস্যা হতো?

সব project এর package এক জায়গায় install হতো। এক project এ কোনো package এর version বদলালে অন্য project ভেঙে যেত। venv প্রতিটা project কে আলাদা ঘর দেয়।

`pyproject.toml` আর `uv.lock` এর পার্থক্য কী?

pyproject.toml এ তুমি লেখো কোন package চাও আর মোটামুটি কোন version (যেমন httpx>=0.28)। uv.lock এ uv লিখে রাখে ঠিক কোন version install হয়েছে (যেমন 0.28.1) আর তার ভেতরের সব dependency। ফলে অন্য machine এ uv sync করলে হুবহু একই জিনিস install হয়। Flutter এর pubspec.yaml আর pubspec.lock এর মতো।

`.venv` folder কেন Git এ রাখি না?

এটা অনেক বড়, machine অনুযায়ী আলাদা, আর uv.lock থেকে যে কেউ uv sync দিয়ে আবার বানাতে পারে। তাই রাখার দরকার নেই।

`uv add --dev pytest` আর `uv add pytest` এর পার্থক্য কী?

--dev দিলে package টা শুধু development এর জন্য যোগ হয়। Production এ deploy করার সময় dev package বাদ দিয়ে install করা যায়, ফলে server এ অদরকারি জিনিস থাকে না।

চিহ্ন দিলে sidebar আর রোডম্যাপে এই অধ্যায়ের station ভরে যাবে।