এআই ইঞ্জিনিয়ার ট্র্যাক আর uv দিয়ে ডেভ এনভায়রনমেন্ট
পাইথন ইনস্টল, pip কেন নয় আর uv কেন, আর uv init, uv add ও uv run দিয়ে প্রতিটি প্রজেক্টের জন্য আলাদা, পুনরুৎপাদনযোগ্য পরিবেশ — সাথে এডিটরে সঠিক ইন্টারপ্রেটার।
কীভাবে শিখতে চান?
যে সমস্যাটা আমরা সমাধান করছি
একটি টিমে নতুন একজন এআই ইঞ্জিনিয়ার যোগ দিয়েছেন। প্রথম দিনের কাজ সহজ: প্রজেক্টটি নিজের ল্যাপটপে চালানো। README-তে লেখা আছে «python main.py চালান»। তিনি চালালেন, আর পেলেন ModuleNotFoundError: No module named 'httpx'। যিনি প্রজেক্টটি লিখেছিলেন, তাঁর মেশিনে একই কমান্ড দিব্যি চলে।
কারণ খুঁজতে গিয়ে দেখা গেল, আসল লেখকের কম্পিউটারের পাইথনে দুই বছর ধরে যত প্রজেক্টের যত প্যাকেজ দরকার হয়েছে, সব একই জায়গায় জমা হয়েছে। প্রজেক্টটি কোন প্যাকেজের উপর নির্ভর করে, সেটা কোথাও লেখা নেই — শুধু «আমার মেশিনে চলে»। নতুন সহকর্মীর অর্ধেক দিন যায় একটা একটা করে প্যাকেজ খুঁজে ইনস্টল করতে, আর শেষে দেখা যায় একটি প্যাকেজের সংস্করণ আলাদা, তাই ফলও আলাদা।
পেশাদার টিমে এই সমস্যার উত্তর একটাই: প্রতিটি প্রজেক্টের নিজস্ব, আলাদা পরিবেশ, আর সেই পরিবেশে কী কী আছে তা একটি ফাইলে লেখা, যাতে যে কেউ এক কমান্ডে হুবহু একই পরিবেশ বানাতে পারেন। এই অধ্যায়ে আমরা ঠিক সেটাই গড়ব — uv দিয়ে — আর পুরো কোর্সে সেটাই ব্যবহার করব।
এই অধ্যায় শেষে আপনি পারবেন
- সাধারণ ইনস্টলার দিয়ে এবং
uv python installদিয়ে পাইথন ইনস্টল করতে, আর দুটির পার্থক্য বলতে pipকী, আর এই কোর্স কেন তার বদলেuvব্যবহার করে, তা ব্যাখ্যা করতেuv init,uv add,uv runআরuv venvদিয়ে একটি আলাদা প্রজেক্ট পরিবেশ বানাতে ও চালাতে- কেন সিস্টেম পাইথনে প্রজেক্ট চালানো উচিত নয়, তা একটি উদাহরণ দিয়ে দেখাতে
- VS Code বা PyCharm-এ প্রজেক্টের নিজস্ব ইন্টারপ্রেটার বেছে নিতে
আগে যা জানা লাগবে: টার্মিনালে ফোল্ডার বদলানো (cd) আর একটি কমান্ড চালানো। এটি কোর্সের প্রথম অধ্যায়, তাই আর কিছু লাগবে না।
এই ট্র্যাকটি কীভাবে চলে
এই কোর্সটি একটি ক্যারিয়ার ট্র্যাক। প্রতিটি অধ্যায় একটি ক্লাসের মতো, আর প্রতিটির শেষে আপনার নিজের মেশিনে চালানোর মতো একটি কাজ থাকে। শুরুর অধ্যায়গুলো পেশাদার কাজের ভিত্তি গড়ে — পরিবেশ, Git, প্রজেক্টের কাঠামো, কনফিগারেশন। তারপর আসবে পরিষ্কার পাইথন, টেস্টিং, API, ডেটাবেস, RAG, নিরাপত্তা আর ডিপ্লয়মেন্ট।
একটি কথা শুরুতেই পরিষ্কার থাকা ভালো: কোম্পানিতে একজন এআই ইঞ্জিনিয়ারের কোড কেবল «চলে» বলে গ্রহণযোগ্য হয় না। অন্য একজন সেটি নিজের মেশিনে চালাতে পারবেন কি না, কেউ রিভিউ করতে পারবেন কি না, ছয় মাস পরে কেউ বুঝবেন কি না — এগুলোও কাজের অংশ। তাই এই কোর্সের প্রতিটি হাতে-কলমে কাজ এমনভাবে সাজানো, যেন সেটি একটি আসল টিমের রিপোজিটরিতে যাচ্ছে। আর সেই অভ্যাসের প্রথম ধাপ হলো পরিবেশ।
পাইথন ইনস্টল করা: দুটি পথ
প্রথম পথ — সাধারণ ইনস্টলার। python.org থেকে ৩.১২ সংস্করণের ইনস্টলার নামিয়ে চালান। উইন্ডোজে প্রথম পর্দাতেই Add python.exe to PATH বাক্সটিতে টিক দিন; না দিলে টার্মিনাল python কমান্ডটি চিনবে না। macOS-এ python.org-এর .pkg ফাইলটি চালালেই হয়। লিনাক্সে সাধারণত python3 আগে থেকেই থাকে — আর সেটা নিয়েই নিচে একটি সতর্কবার্তা আছে।
যাচাই করতে:
python --version
Python 3.12.0macOS আর লিনাক্সে কমান্ডটি প্রায়ই python3 --version।
দ্বিতীয় পথ — uv দিয়ে। uv একটি টুল যা পাইথনের সংস্করণ, প্রজেক্টের পরিবেশ আর প্যাকেজ — তিনটিই একা সামলায়। আগে uv ইনস্টল করুন। macOS ও লিনাক্সে:
curl -LsSf https://astral.sh/uv/install.sh | shউইন্ডোজের PowerShell-এ:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"তারপর একটি নতুন টার্মিনাল খুলে:
uv --version
uv 0.9.1 (9887ef5bd 2025-10-09)আপনার সংস্করণ নম্বর আলাদা হতে পারে। এবার পাইথন:
uv python install 3.12
Installed Python 3.12.11 in 27.42s
+ cpython-3.12.11-windows-x86_64-none (python3.12.exe)সময়টি আর শেষের প্ল্যাটফর্মের নাম আপনার মেশিনে আলাদা হবে। খেয়াল করুন, uv যে পাইথনটি বসাল সেটি তার নিজের একটি ফোল্ডারে থাকে — কম্পিউটারের মূল পাইথনকে সে ছোঁয় না, আর PATH-ও বদলায় না।
দুটি পথ একসাথে থাকতে পারে, আর এই কোর্সে দুটিই চলবে। পার্থক্য হলো: সাধারণ ইনস্টলার একটি পাইথন দেয় যা পুরো কম্পিউটারের; uv python install এমন পাইথন দেয় যা প্রজেক্টগুলো দরকার অনুযায়ী বেছে নেয়। একটি প্রজেক্ট ৩.১২ চাইলে, আরেকটি ৩.১৩ — কেউ কারও পথে আসে না।
pip কী, আর আমরা কেন uv ব্যবহার করি
পাইথনের বাইরের প্যাকেজগুলো — httpx, pydantic, fastapi — থাকে PyPI নামের একটি ভাণ্ডারে। সেখান থেকে নামানোর ঐতিহ্যবাহী হাতিয়ার pip, যা পাইথনের সাথেই আসে। আপনি ইন্টারনেটের প্রায় সব টিউটোরিয়ালে pip install ... দেখবেন।
pip ভালো কাজ করে, কিন্তু সে শুধু একটা কাজই করে: প্যাকেজ বসানো। আর বসায় যে পাইথন দিয়ে তাকে চালানো হলো, সেখানেই। একটি পেশাদার প্রজেক্টের জন্য বাকি সব কাজ আলাদা টুল দিয়ে সারতে হতো:
- পাইথনের সঠিক সংস্করণ জোগাড় করা — আলাদা টুল
- আলাদা পরিবেশ বানানো ও চালু করা —
python -m venv, তারপর হাতেactivate - প্রজেক্ট কী কী চায় তা লিখে রাখা — হাতে একটি ফাইলে, প্রায়ই ভুলে যাওয়া
- প্রতিটি প্যাকেজের ঠিক কোন সংস্করণ চলেছিল তা আটকে রাখা (লকফাইল) — আরও একটি টুল
uv এই চারটি কাজ একটি টুলে করে, আর অনেক দ্রুত করে। সবচেয়ে গুরুত্বপূর্ণ হলো, uv add দিয়ে কিছু যোগ করলে সেটি স্বয়ংক্রিয়ভাবে প্রজেক্টের ফাইলে লেখা হয়ে যায়। «ইনস্টল করেছি কিন্তু লিখতে ভুলে গেছি» — উপরের নতুন সহকর্মীর সমস্যার মূল কারণ — এই পথে ঘটেই না।
তাই এই কোর্সে যেখানেই প্যাকেজ বা পরিবেশের কথা আসবে, সেখানে uv। অন্য কোথাও pip install দেখলে তার uv সমতুল্য প্রায় সবসময় uv add।
সিস্টেম পাইথন কেন প্রজেক্টের জায়গা নয়
«সিস্টেম পাইথন» মানে কম্পিউটারে সরাসরি ইনস্টল করা পাইথন — যেটি টার্মিনালে কোনো পরিবেশ চালু না করে python লিখলে চলে। এতে প্রজেক্টের প্যাকেজ বসানোর তিনটি সমস্যা:
- সবাই একই ঘরে। একটি প্রজেক্টের জন্য
pydantic১ দরকার, আরেকটির জন্য ২। সিস্টেম পাইথনে একটিই থাকতে পারে, তাই একটিকে ঠিক করলে অন্যটি ভাঙে। - নির্ভরতা অদৃশ্য হয়ে যায়। প্যাকেজটি আগেই কোনো পুরনো প্রজেক্টের জন্য বসানো ছিল, তাই নতুন প্রজেক্টটি চলে — অথচ প্রজেক্টের কোথাও লেখা নেই যে তার এটি লাগে। আপনার মেশিনে কোনো ত্রুটি আসে না; ত্রুটি আসে সহকর্মীর মেশিনে, বা সার্ভারে।
- অপারেটিং সিস্টেম নিজেই এটি ব্যবহার করে। macOS আর লিনাক্সে সিস্টেমের কিছু টুল ওই পাইথনের উপর চলে। সেখানে প্যাকেজ বদলালে সিস্টেমের টুল ভাঙতে পারে — এজন্যই নতুন লিনাক্স সংস্করণগুলো সিস্টেম পাইথনে সরাসরি ইনস্টল আটকে দেয়।
দ্বিতীয় সমস্যাটিই সবচেয়ে বিপজ্জনক, কারণ সেটি নিঃশব্দ। এই অধ্যায় যে মেশিনে লেখা হয়েছে, তার সিস্টেম পাইথনে পুরনো কাজ থেকে httpx, pydantic, rich সবই পড়ে আছে। ফলে যেকোনো স্ক্রিপ্ট সেখানে «চলে» — আর ঠিক সেই কারণেই সেখানে কোনো স্ক্রিপ্ট সত্যিই কী চায়, তা বোঝার উপায় নেই।
ভুল ধারণাটি হলো: «আমার মেশিনে চলছে, মানে ঠিক আছে।» সিস্টেম পাইথনে চলা স্ক্রিপ্ট কেবল প্রমাণ করে যে আপনার মেশিনে কোনো একসময় প্যাকেজটি বসানো হয়েছিল। প্রজেক্ট নিজে কী চায়, সেটা প্রমাণ হয় কেবল তখন, যখন একটি খালি পরিবেশ থেকে প্রজেক্টের ফাইল পড়ে সবকিছু বসানো হয় আর তারপর স্ক্রিপ্টটি চলে।
uv দিয়ে প্রথম প্রজেক্ট
একটি কাজের ফোল্ডারে দাঁড়িয়ে:
uv init hello-ai --python 3.12
Initialized project `hello-ai` at `D:\ai-lab\hello-ai`(শেষের পথটি আপনার নিজের ফোল্ডারের পথ হবে; এই অধ্যায়ের ট্রান্সক্রিপ্টে পথগুলো ছোট করে দেখানো হয়েছে।) uv init একটি নতুন ফোল্ডার বানায়, আর তার ভেতরে:
hello-ai/
├── .git/
├── .gitignore
├── .python-version
├── README.md
├── main.py
└── pyproject.tomlএর মধ্যে সবচেয়ে জরুরি pyproject.toml — প্রজেক্টের পরিচয়পত্র:
[project]
name = "hello-ai"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []dependencies = [] — এখনো প্রজেক্টটি কোনো বাইরের প্যাকেজ চায় না। .python-version ফাইলে শুধু লেখা 3.12: এই প্রজেক্ট কোন পাইথন দিয়ে চলবে। আর uv init নিজেই একটি Git রিপোজিটরি আর .gitignore বানিয়ে দিয়েছে — পরের অধ্যায়ে সেগুলো কাজে লাগবে।
এবার চালান:
cd hello-ai
uv run main.py
Using CPython 3.12.11
Creating virtual environment at: .venv
Hello from hello-ai!প্রথমবার uv run নিজে থেকেই একটি .venv ফোল্ডার বানাল — এটিই প্রজেক্টের আলাদা পরিবেশ — তারপর সেই পরিবেশের পাইথন দিয়ে main.py চালাল। আপনাকে কিছু activate করতে হয়নি।
uv add: প্যাকেজ যোগ করা, আর সেটা লিখে রাখা
একজন এআই ইঞ্জিনিয়ারের প্রায় প্রতিটি প্রজেক্ট কোনো না কোনো API ডাকে, তাই প্রথম প্যাকেজ হিসেবে HTTP ক্লায়েন্ট httpx, আর সাথে .env ফাইল পড়ার জন্য python-dotenv:
uv add httpx python-dotenv
Resolved 9 packages in 119ms
Installed 8 packages in 92ms
+ anyio==4.15.1
+ certifi==2026.7.22
+ h11==0.16.0
+ httpcore==1.0.9
+ httpx==0.28.1
+ idna==3.20
+ python-dotenv==1.2.3
+ typing-extensions==4.16.0আপনি দুটি প্যাকেজ চেয়েছিলেন, এসেছে আটটি — বাকিগুলো httpx-এর নিজের নির্ভরতা, যা uv নিজেই খুঁজে নিয়েছে। সংস্করণ নম্বরগুলো আপনার সময়ে নতুন হতে পারে।
এবার pyproject.toml দেখুন:
[project]
name = "hello-ai"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"httpx>=0.28.1",
"python-dotenv>=1.2.3",
]একটি কমান্ডে তিনটি কাজ হলো: প্যাকেজগুলো .venv-এ বসল, pyproject.toml-এ লেখা হলো যে প্রজেক্টটি এগুলো চায়, আর uv.lock নামে একটি নতুন ফাইল তৈরি হলো, যেখানে আটটি প্যাকেজেরই হুবহু সংস্করণ আটকে রাখা। লকফাইল নিয়ে বিস্তারিত আলোচনা কোর্সে একটু পরে আসছে; আপাতত এটুকু জানলেই চলবে যে সহকর্মী রিপোজিটরিটি নামিয়ে uv sync চালালে ঠিক এই আটটি সংস্করণই পাবেন।
কিছু বাদ দিতে uv remove:
uv remove python-dotenv
Resolved 8 packages in 21ms
Uninstalled 1 package in 11ms
- python-dotenv==1.2.3এটিও দুই জায়গায় কাজ করে: .venv থেকে সরায়, আর pyproject.toml থেকেও মুছে দেয়।
uv venv, আর হাতে activate করা
uv run আপনার জন্য পরিবেশ বানায় ও ব্যবহার করে, তাই এই কোর্সে প্রায় সবসময় সেটাই যথেষ্ট। তবে কখনো শুধু একটি খালি পরিবেশ দরকার হয় — যেমন একটি পুরনো প্রজেক্টে, যার এখনো pyproject.toml নেই। তখন:
uv venv --python 3.12
Using CPython 3.12.11
Creating virtual environment at: .venv
Activate with: .venv\Scripts\activateশেষের লাইনটি উইন্ডোজের PowerShell-এর। এখানেই অপারেটিং সিস্টেম ভেদে পার্থক্য:
# Windows (PowerShell)
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activateচালু হলে প্রম্পটের শুরুতে (hello-ai) বা (.venv) দেখাবে, আর তখন সাধারণ python কমান্ড ওই পরিবেশের পাইথন চালায়। বেরোতে deactivate। মনে রাখবেন, uv run ব্যবহার করলে এই ধাপের কোনোটাই লাগে না — সেটাই তার সুবিধা, আর টিমের README-তে uv run লেখাই নিরাপদ, কারণ সেখানে «activate করতে ভুলে গেছি» বলে কোনো অবস্থা নেই।
এডিটরকে প্রজেক্টের পাইথন চেনানো
টার্মিনালে প্রোগ্রাম চলছে, অথচ এডিটরে import httpx লাইনের নিচে লাল দাগ — এটা প্রায় সবসময় এডিটর অন্য একটি পাইথনের দিকে তাকিয়ে থাকার লক্ষণ।
VS Code: Microsoft-এর Python এক্সটেনশনটি ইনস্টল করুন। তারপর প্রজেক্ট ফোল্ডারটি খুলে Ctrl + Shift + P (macOS-এ Cmd + Shift + P) → Python: Select Interpreter → তালিকা থেকে .venv-এর পাইথনটি বেছে নিন। তালিকায় না থাকলে Enter interpreter path দিয়ে দেখিয়ে দিন: উইন্ডোজে .venv\Scripts\python.exe, macOS/লিনাক্সে .venv/bin/python।
PyCharm: Settings → Project → Python Interpreter → Add Interpreter → Add Local Interpreter → বিদ্যমান পরিবেশ বেছে নিয়ে একই পথটি দিন। সাম্প্রতিক সংস্করণগুলোতে সরাসরি uv পরিবেশের বিকল্পও আছে।
এডিটর কোন পাইথন দেখছে, সেটা নিশ্চিত হওয়ার সহজ উপায় হলো এডিটরের ভেতরের টার্মিনালে এটি চালানো:
import sys
print(sys.executable)পথটি আপনার প্রজেক্টের .venv-এর ভেতরে শেষ হওয়া উচিত — যেমন ...\hello-ai\.venv\Scripts\python.exe। পথের শুরুটা আপনার ফোল্ডার অনুযায়ী আলাদা হবে, তাই এখানে পুরো আউটপুট দেওয়া হলো না।
একটা সম্পূর্ণ উদাহরণ
hello-ai প্রজেক্টে env_check.py নামে একটি ফাইল বানান। এটি একটি ছোট «পরিবেশ-যাচাই» স্ক্রিপ্ট — টিমে নতুন কেউ যোগ দিলে প্রথমে এমন কিছু চালিয়ে দেখা হয় যে সবকিছু ঠিক জায়গায় আছে কি না:
import sys
from importlib.metadata import version
from pathlib import Path
def main() -> None:
in_venv = sys.prefix != sys.base_prefix
print(f"Python : {sys.version_info.major}.{sys.version_info.minor}")
print(f"In a venv : {in_venv}")
print(f"Env folder : {Path(sys.prefix).name}")
import httpx # installed with `uv add httpx`
print(f"httpx : {version('httpx')}")
print(f"Client ready: {httpx.Client is not None}")
print("Hello, AI engineer.")
if __name__ == "__main__":
main()প্রজেক্টের ভেতর থেকে চালান:
uv run env_check.pyPython : 3.12
In a venv : True
Env folder : .venv
httpx : 0.28.1
Client ready: True
Hello, AI engineer.এবার একই ফাইলটি একটি খালি পরিবেশে চালিয়ে দেখা যাক। অন্য একটি ফোল্ডারে ফাইলটি কপি করে uv venv --python 3.12 দিয়ে পরিবেশ বানিয়ে, তার পাইথন দিয়ে সরাসরি চালানো হলো (উইন্ডোজে .venv\Scripts\python env_check.py, macOS/লিনাক্সে .venv/bin/python env_check.py):
Python : 3.12
In a venv : True
Env folder : .venv
Traceback (most recent call last):
File "env_check.py", line 20, in <module>
main()
File "env_check.py", line 12, in main
import httpx # installed with `uv add httpx`
^^^^^^^^^^^^
ModuleNotFoundError: No module named 'httpx'(ট্রেসব্যাকে আপনার মেশিনে ফাইলের পুরো পথ দেখাবে; এখানে শুধু নামটুকু রাখা হয়েছে।)
এই স্ক্রিপ্টের কয়েকটি সিদ্ধান্ত খেয়াল করার মতো।
sys.prefix != sys.base_prefix — পাইথন নিজেই জানে সে একটি ভার্চুয়াল পরিবেশে চলছে কি না। sys.base_prefix হলো যে মূল পাইথন থেকে পরিবেশটি বানানো, আর sys.prefix হলো এখন যেটি চলছে। দুটি আলাদা মানে আপনি একটি পরিবেশের ভেতরে।
পুরো পথ নয়, শুধু ফোল্ডারের নাম — Path(sys.prefix).name কেবল শেষ অংশটুকু, .venv, ছাপায়। পুরো পথ প্রতিটি মেশিনে আলাদা; নামটি সবার কাছে এক। একটি যাচাই-স্ক্রিপ্টের আউটপুট যত কম মেশিন-নির্ভর হয়, টিমের চ্যাটে সেটা তুলনা করা তত সহজ।
import httpx ফাংশনের মাঝখানে — সাধারণত import ফাইলের শুরুতে থাকে, আর থাকা উচিতও। এখানে ইচ্ছে করে মাঝখানে রাখা হয়েছে, যাতে খালি পরিবেশে প্রথম তিনটি লাইন ছাপা হয়ে তারপর ত্রুটি আসে। ফলে ত্রুটির আউটপুট নিজেই বলে দেয় কী হয়েছে: পাইথন ৩.১২ ঠিক আছে, পরিবেশও চালু, কিন্তু সেই পরিবেশে httpx নেই। সমাধান uv add httpx — অথবা, যদি প্রজেক্টের pyproject.toml-এ এটি আগেই লেখা থাকে, uv sync।
version('httpx') — প্যাকেজের সংস্করণ পড়ার আদর্শ উপায় importlib.metadata। সব প্যাকেজের __version__ থাকে না, কিন্তু ইনস্টল করা প্রতিটি প্যাকেজের মেটাডেটা থাকে।
কিছু ভাঙা অবস্থা ও তার সমাধান
The term 'uv' is not recognized as the name of a cmdlet, function, script file, or operable program (macOS/লিনাক্সে uv: command not found) uv ইনস্টল হয়েছে, কিন্তু যে টার্মিনালে লিখছেন সেটি ইনস্টলের আগে খোলা, তাই নতুন PATH সে জানে না। টার্মিনাল (আর VS Code হলে পুরো এডিটর) বন্ধ করে আবার খুলুন।
error: No pyproject.toml found in current directory or any parent directory আপনি প্রজেক্ট ফোল্ডারের বাইরে দাঁড়িয়ে uv add চালিয়েছেন। uv add প্রজেক্টের ফাইলে লেখে, তাই প্রজেক্ট না থাকলে তার লেখার জায়গা নেই। cd দিয়ে প্রজেক্টে ঢুকুন, অথবা নতুন হলে আগে uv init।
ModuleNotFoundError: No module named 'httpx' যে পাইথন স্ক্রিপ্টটি চালাচ্ছে, সেখানে প্যাকেজটি নেই। দুটি সাধারণ কারণ: প্যাকেজটি কখনো uv add করা হয়নি, অথবা স্ক্রিপ্টটি uv run ছাড়া সরাসরি python দিয়ে চালানো হয়েছে, ফলে প্রজেক্টের পরিবেশ নয়, সিস্টেম পাইথন চলেছে। uv run env_check.py দিয়ে চালান।
error: Failed to spawn: hello.py তারপর Caused by: program not found uv run-কে এমন ফাইলের নাম দিয়েছেন যা বর্তমান ফোল্ডারে নেই — সাধারণত নামের বানান ভুল, বা ভুল ফোল্ডারে দাঁড়িয়ে আছেন। ফাইলটি না পেয়ে uv নামটিকে একটি প্রোগ্রাম ভেবে খুঁজেছে, তাই বার্তাটি একটু অদ্ভুত।
× No solution found when resolving dependencies তারপর Because htpx was not found in the package registry ... প্যাকেজের নামে টাইপো (htpx)। ভালো খবর হলো, ব্যর্থ uv add কিছুই বদলায় না — pyproject.toml আর uv.lock আগের মতোই থাকে। বানান ঠিক করে আবার চালান।
.venv\Scripts\activate : File ... cannot be loaded because running scripts is disabled on this system PowerShell-এর নিরাপত্তা নীতি। একবার Set-ExecutionPolicy -Scope CurrentUser RemoteSigned চালিয়ে নতুন টার্মিনাল খুলুন — অথবা activate না করে সবকিছু uv run দিয়ে চালান।
ধাপ ৪ / ৬ — অনুমান
যাচাই করুন
এই ফাইলটি check.py নামে hello-ai প্রজেক্টে রেখে uv run check.py চালানো হলো। কী ছাপা হবে?
import sys
print(sys.prefix != sys.base_prefix)
print(sys.version_info.major)- A`.venv`, তারপর `3.12`
- B`True`, তারপর `3`
- C`True`, তারপর `12`
- D`False`, তারপর `3`
প্রজেক্টের pyproject.toml-এ httpx লেখা আছে, আর uv.lock-ও রিপোজিটরিতে আছে। তবু একজন নতুন সহকর্মী একেবারে নতুন ল্যাপটপে README-র ধাপগুলো মেনে ModuleNotFoundError: No module named 'httpx' পেলেন। README-র ভুলটি কোথায়?
# README of a team project, "How to run" section:
# 1. git clone <repo-url>
# 2. cd summarizer
# 3. python main.py
import httpx
print("client:", httpx.Client.__name__)- Aক্লোনের পরে `uv init` চালানোর ধাপটি বাদ পড়েছে
- Bসহকর্মীকে আগে `uv add httpx` চালাতে হবে, তারপর `python main.py`
- C`import httpx` লাইনটি ফাইলের শুরুতে না রেখে `main()` ফাংশনের ভেতরে রাখতে হবে
- Dতৃতীয় ধাপ সিস্টেম পাইথন চালায়; লেখা উচিত `uv run main.py`, যা `pyproject.toml` আর `uv.lock` থেকে `.venv` বানিয়ে তার ভেতরে চালায়
uv init আর uv add চালানোর পর প্রজেক্টে pyproject.toml, uv.lock, .python-version আর .venv আছে। টিমের Git রিপোজিটরিতে কোনগুলো যাবে?
- A`.python-version` বাদে সব, কারণ পাইথনের সংস্করণ প্রত্যেকের ব্যক্তিগত পছন্দ
- B`pyproject.toml`, `uv.lock` আর `.python-version` যাবে; `.venv` যাবে না
- Cচারটিই, `.venv`-সহ, যাতে সহকর্মীদের কিছু ইনস্টল করতে না হয়
- Dশুধু `pyproject.toml`; `uv.lock` স্বয়ংক্রিয়ভাবে তৈরি হয়, তাই সেটিও বাদ
প্লে প্রো-এর অংশ
+30 XP অপেক্ষায়
প্রো দিয়ে এই অধ্যায়টি খেলুন
পড়া ফ্রি, পুরো অধ্যায়টিই খোলা। প্রতিটি ফ্রি কোর্সের প্রথম 5টি অধ্যায় ফ্রিতে খেলা যায়। অধ্যায় 6 থেকে প্রশ্নের উত্তর দেওয়া, XP পাওয়া আর স্ট্রিক বাড়ানো প্রো-এর অংশ।
প্রো দিয়ে প্লে চালু করুননিজে করুন
নিজের মেশিনে uv আর পাইথন ৩.১২ তৈরি রেখে একটি নতুন প্রজেক্ট বানান:
uv init my-first-agent --python 3.12দিয়ে প্রজেক্ট তৈরি করুন, আরuv add httpxদিয়ে একটি প্যাকেজ যোগ করুন- প্রজেক্টে উপরের
env_check.pyফাইলটি হুবহু লিখুন, আরuv run env_check.pyদিয়ে চালান pyproject.tomlখুলে দেখান যেdependencies-এর ভেতরেhttpxলেখা হয়েছে, আর প্রজেক্টেuv.lockফাইল তৈরি হয়েছে- VS Code বা PyCharm-এ প্রজেক্টটি খুলে ইন্টারপ্রেটার হিসেবে প্রজেক্টের
.venvবেছে নিন, যাতেimport httpxলাইনে কোনো লাল দাগ না থাকে
প্রত্যাশিত আউটপুট (httpx-এর সংস্করণ আপনার সময়ে নতুন হতে পারে):
Python : 3.12
In a venv : True
Env folder : .venv
httpx : 0.28.1
Client ready: True
Hello, AI engineer.তারপর ইচ্ছে করে একবার ভাঙুন: uv remove httpx চালিয়ে আবার uv run env_check.py চালান। কোন লাইন পর্যন্ত ছাপা হয় আর কোন ত্রুটি আসে, আর pyproject.toml-এ কী বদলাল — লিখে রাখুন। তারপর uv add httpx দিয়ে ঠিক করুন। এই «ভাঙা আর জোড়া» চক্রটি দুই মিনিটের, কিন্তু প্রথম চাকরির প্রথম সপ্তাহে এটাই আপনাকে সবচেয়ে বেশি সময় বাঁচাবে।
ধাপ ৬ / ৬
কঠিন করা — অধ্যায়ের কুইজ
সহজ থেকে কঠিন — দশটি প্রশ্ন, শেষেরগুলো ইচ্ছে করেই কঠিন।
প্রো দিয়ে খেলুন