পরিবেশ তৈরি ও প্রথম 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 এ তিনটা জিনিস আলাদা করে বোঝা দরকার:
- Python interpreter: যে program তোমার
.pyfile পড়ে চালায়। Flutter এ যেমন Dart SDK। - Package: অন্যের লেখা library, যেমন
fastapi,httpx। Flutter এ যেমনdio,provider। - Virtual environment (venv): প্রতিটা project এর নিজস্ব আলাদা ঘর, যেখানে সেই project এর package গুলো থাকে।
Virtual environment কেন লাগে? ধরো Project A তে fastapi এর পুরনো version লাগে, Project B তে নতুন। সব package যদি computer এর এক জায়গায় install হয়, তাহলে একটা আরেকটাকে ভেঙে দেবে। তাই প্রতিটা project এর জন্য আলাদা .venv folder থাকে।
আগে এই কাজের জন্য 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 খুলে:
# 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) এ এটা যোগ করো:
{
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true
},
"python.analysis.typeCheckingMode": "standard"
}এখন file save করলেই code সুন্দর করে সাজানো হবে, আর type এর ভুল লাল দাগ দিয়ে দেখাবে।
#ধাপ ৩: প্রথম project তৈরি
mkdir -p ~/code && cd ~/code
uv init hello-python
cd hello-python
ls -lauv এই file গুলো বানাবে:
hello-python/
├── .git/ ← Git repo (uv নিজেই init করে)
├── .gitignore ← কোন file Git এ যাবে না
├── .python-version ← এই project কোন Python version ব্যবহার করবে
├── README.md
├── main.py ← তোমার code
└── pyproject.toml ← project এর পরিচয় আর package listpyproject.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 এর নাম জমা হবে।
এখন চালাও:
uv run main.pyপ্রথমবার চালালে uv নিজেই .venv folder বানাবে, তারপর main.py চালাবে। Output আসবে Hello from hello-python!
#ধাপ ৪: Package যোগ করা
একটা আসল কাজ করি: internet থেকে data আনি। এর জন্য httpx package লাগবে (Flutter এর http বা dio এর মতো)।
uv add httpxএখন pyproject.toml এ dependencies = ["httpx>=0.28.1"] এর মতো কিছু দেখবে, আর একটা uv.lock file তৈরি হবে। main.py বদলে লেখো:
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()uv run main.py#Development এর জন্য আলাদা package
কিছু package শুধু তোমার কাজের সময় লাগে, production server এ লাগে না। যেমন test চালানোর pytest আর code check করার ruff:
uv add --dev pytest ruffএগুলো pyproject.toml এ আলাদা [dependency-groups] অংশে যাবে।
#অন্য কারও project চালানো
GitHub থেকে কারও Python project নামালে শুধু এটা চালাও:
uv sync # uv.lock দেখে হুবহু একই version এর সব package install করবে
uv run main.pyFlutter এ flutter pub get এর মতো।
#ধাপ ৫: Git আর GitHub
তুমি Flutter এ Git ব্যবহার করো, তাই এখানে শুধু Python এর জন্য যা আলাদা সেটা দেখি। uv এর বানানো .gitignore এ .venv আছে কিনা দেখো। .venv কখনো Git এ যাবে না, কারণ এটা যে কেউ uv sync দিয়ে আবার বানাতে পারে।
git add .
git commit -m "প্রথম Python project"
# GitHub এ repo বানিয়ে push (gh CLI থাকলে)
gh repo create hello-python --public --source=. --push#ধাপ ৬: learning-journey repo
পুরো ১২ মাসের জন্য একটা আলাদা repo খোলো:
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 লেখার দরকার নেই:
uv run 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 ভরে যাবে।