অধ্যায় 3 · আসল প্রোগ্রাম লেখা
মডিউল, প্যাকেজ ও pip
- পৃষ্ঠা 9 / 20
- 4 মিনিট পড়া
কেউই শূন্য থেকে একটা AI অ্যাপ্লিকেশন লেখে না। আপনি দাঁড়িয়ে থাকেন অন্যদের লিখে শেয়ার করা কোডের ওপর: Python-এর নিজস্ব স্ট্যান্ডার্ড লাইব্রেরি, যা Python-এর সাথেই আসে, আর PyPI-তে থাকা লক্ষ লক্ষ প্যাকেজ, যা pip দিয়ে ইনস্টল হয়। এই পাতায় দেখবেন দুটোই কীভাবে ব্যবহার করবেন — আর নিজের কোড কীভাবে কয়েকটা ফাইলে ভাগ করবেন।
ইমপোর্ট করা
মডিউল হলো সাধারণ একটা Python ফাইল, যার ফাংশন আর ভেরিয়েবল আরেক ফাইল থেকে ব্যবহার করা যায়। import সেটা নিয়ে আসে। তিনটা প্রচলিত রূপ:
| রূপ | তারপর লিখবেন | কখন |
|---|---|---|
import math | math.sqrt(2) | সাধারণত: প্রতিটা নাম কোথা থেকে এল পরিষ্কার |
from math import sqrt | sqrt(2) | এক-দুটো নাম খুব বেশি ব্যবহার করলে |
import numpy as np | np.array(...) | লম্বা নামের সুপরিচিত ছোট নাম থাকলে |
from module import * এড়িয়ে চলুন: এটা সব নাম আপনার ফাইলে ঢেলে দেয় আর কোনটা কোথা থেকে এল তা লুকিয়ে ফেলে।
স্ট্যান্ডার্ড লাইব্রেরি: সবকিছু সাথেই আছে
গণিত, তারিখ, এলোমেলো সংখ্যা, ফাইল, JSON, ইন্টারনেট আর আরও অনেক কিছুর মডিউল Python-এর সাথেই আসে। কয়েকটা আপনি সারাক্ষণ ব্যবহার করবেন:
import math
from random import choice, seed
from datetime import date, timedelta
from collections import Counter
print(math.sqrt(144), math.ceil(4.2), math.pi)
seed(42) # প্রতিবার একই "এলোমেলো" ফলাফল
print(choice(["red", "green", "blue"]))
exam_day = date(2026, 12, 1)
print(exam_day + timedelta(days=30))
words = "to be or not to be".split()
print(Counter(words).most_common(2))12.0 5 3.141592653589793
blue
2026-12-31
[('to', 2), ('be', 2)]Counter আপনার হয়ে গুনে দেয় — এক লাইনে শব্দের পুনরাবৃত্তি। seed(42) "এলোমেলো" বাছাইটা প্রতিবার একই রাখে, পরীক্ষা পুনরাবৃত্তিযোগ্য হতে হলে যা দরকার। মেশিন লার্নিংয়ের কোডে ঠিক এই কারণেই seed দেওয়া হয়।
import statistics as stats
latencies_ms = [220, 180, 950, 210, 205]
print(stats.mean(latencies_ms))
print(stats.median(latencies_ms)) # একটা ধীর কলে উঁচু হয়ে যায় না353
210একটা ধীর API কল (950 ms) গড়কে টেনে তোলে; মিডিয়ান দেখায় সাধারণ অবস্থা। কোন সারাংশটা জানাতে হবে তা বোঝা ডেটা নিয়ে কাজেরই অংশ।
নিজের মডিউল
একটা ফাইল কয়েকশো লাইন ছাড়ালে ভাগ করুন। সম্পর্কিত ফাংশনগুলো আলাদা ফাইলে রেখে ইমপোর্ট করুন। এই যে একটা মডিউল, text_tools.py:
# text_tools.py
"""লেখা নিয়ে কাজের ছোট সহায়ক ফাংশন।"""
def clean(text):
"""একাধিক স্পেসকে একটা স্পেসে নামিয়ে আনে।"""
return " ".join(text.split())
def word_count(text):
return len(text.split())
if __name__ == "__main__":
# শুধু ফাইলটা সরাসরি চালালে চলে, import করলে নয়।
print(clean(" quick self-test "))আর তার পাশে একটা প্রোগ্রাম, যা এটা ব্যবহার করে:
# main.py
from text_tools import clean, word_count
note = " Python is fun "
print(clean(note))
print(word_count(note))Python is fun
3খেয়াল করুন, সেল্ফ-টেস্টটা প্রিন্ট হয়নি: if __name__ == "__main__":-এর নিচের অংশ চলে শুধু সরাসরি python text_tools.py চালালে। মডিউলের দ্রুত ডেমো বা পরীক্ষার জন্য এটা ব্যবহার করুন, যাতে কেউ import করলেই সেটা চলে না যায়।
কয়েকটা মডিউলের একটা ফোল্ডার হলো প্যাকেজ। from openai import OpenAI লিখলে আপনি pip দিয়ে ইনস্টল করা openai প্যাকেজ থেকে ইমপোর্ট করছেন।
pip আর requirements.txt
python -m pip install requests # সর্বশেষ সংস্করণ ইনস্টল
python -m pip install "pandas>=3,<4" # সংস্করণের একটা সীমা
python -m pip list # কী কী ইনস্টল আছে
python -m pip freeze > requirements.txt # হুবহু সংস্করণগুলো সংরক্ষণ
python -m pip install -r requirements.txt # অন্য কম্পিউটারে আবার একই রকমrequirements.txt হলো আপনার প্রজেক্টের দরকারি প্যাকেজ (আর সংস্করণ)-এর সাধারণ একটা লেখা তালিকা। কোডের সাথে এটাও রাখুন, তাহলে যে কেউ — একটা সার্ভারও — ঠিক সেগুলোই ইনস্টল করতে পারবে যা আপনার প্রোগ্রাম আশা করে। এই কমান্ডগুলো সবসময় প্রজেক্টের ভার্চুয়াল এনভায়রনমেন্টের ভেতরে চালান (পাতা ২)।
প্যাকেজ ইনস্টলের আগে নিশ্চিত হোন এটা আসলটাই: তার PyPI পাতা, ডাউনলোডের সংখ্যা আর সোর্স রিপোজিটরি দেখুন। হামলাকারীরা টাইপোর আশায় দেখতে একই রকম নামে প্যাকেজ প্রকাশ করে (যেমন
reqeusts)।
নিজে চেষ্টা করুন
- নিজের পছন্দের একটা অনুচ্ছেদ থেকে
Counterদিয়ে সবচেয়ে বেশিবার আসা তিনটা শব্দ বের করুন। datetime.date.today()দিয়ে পরের পরীক্ষা পর্যন্ত আর কত দিন বাকি প্রিন্ট করুন।- পাতা ৭-এর
count_wordsফাংশনটা নিজের একটা মডিউলে সরিয়ে ইমপোর্ট করুন।