12-bo‘lim

Modullar va paketlar

Kodni fayllarga bo'lish, import qilish usullari, standart kutubxona, pip orqali paket o'rnatish va virtual muhit yaratish.

🕑 13 daqiqa o‘qish 📄 636 so‘z 👁 5 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Modul nima?
  2. Import qilishning usullari
  3. if __name__ == "__main__"
  4. Standart kutubxona
  5. math moduli
  6. random moduli
  7. datetime moduli
  8. Paket (package)
  9. pip - tashqi paketlarni o'rnatish
  10. Mashhur paketlar
  11. Virtual muhit (venv)
  12. Amaliy misol: o'z modulingiz
  13. Xulosa

Butun dasturni bitta faylga yozish - kichik mashqlar uchun yaxshi. Lekin loyiha o'sganda kodni modullarga bo'lish kerak bo'ladi.

Modul nima? #

Modul - bu shunchaki .py fayl. Uni boshqa fayldan import orqali chaqirasiz.

hisoblagich.py faylini yarataylik:

Python
# hisoblagich.py
"""Moliyaviy hisob-kitob funksiyalari."""

QQS_FOIZI = 12


def qqs_hisobla(summa):
    """Summadan QQS ni hisoblaydi."""
    return summa * QQS_FOIZI / 100


def chegirma_qolla(summa, foiz):
    """Summaga chegirma qo'llaydi."""
    return summa - (summa * foiz / 100)

Endi asosiy.py faylida undan foydalanamiz:

Python
# asosiy.py
import hisoblagich

narx = 1_000_000
soliq = hisoblagich.qqs_hisobla(narx)

print(f"Narx:     {narx:,}")
print(f"QQS:      {soliq:,.0f}")
print(f"Jami:     {narx + soliq:,.0f}")
print(f"Stavka:   {hisoblagich.QQS_FOIZI}%")
Natija
Narx:     1,000,000
QQS:      120,000
Jami:     1,120,000
Stavka:   12%

Import qilishning usullari #

Python
# 1. Butun modulni
import math
print(math.sqrt(16))

# 2. Modulga qisqa nom berish
import math as mt
print(mt.pi)

# 3. Faqat kerakli qismini
from math import sqrt, pi
print(sqrt(25), pi)

# 4. Qisqa nom bilan
from math import factorial as fakt
print(fakt(5))

# 5. Hammasini (TAVSIYA ETILMAYDI)
from math import *
Natija
4.0
3.141592653589793
5.0 3.141592653589793
120
from modul import * dan qoching

Bu usul modulning barcha nomlarini joriy fayl sohasiga to'kadi. Natijada:

  • Qaysi funksiya qayerdan kelganini bilib bo'lmaydi.
  • Sizning o'zgaruvchilaringiz ustiga yozib yuborilishi mumkin.

Har doim aniq import qiling: from math import sqrt.

if __name__ == "__main__" #

Modulni ham import qilish, ham mustaqil ishga tushirish uchun:

Python
# hisoblagich.py

QQS_FOIZI = 12


def qqs_hisobla(summa):
    return summa * QQS_FOIZI / 100


# Bu blok faqat fayl to'g'ridan-to'g'ri ishga tushirilganda bajariladi
if __name__ == "__main__":
    print("Test rejimi:")
    print(qqs_hisobla(1_000_000))
Qanday ishga tushirilgan__name__ qiymatiBlok bajariladimi
python hisoblagich.py"__main__"Ha
import hisoblagich"hisoblagich"Yo'q
Nima uchun bu muhim?

Bu shablonsiz modulni import qilganingizda uning ichidagi test kodi ham ishga tushib ketadi. if __name__ == "__main__" - Python'dagi eng ko'p uchraydigan idiomalardan biri.

Standart kutubxona #

Python "batareyalar bilan birga keladi" (batteries included) - o'rnatishdan keyin 200 dan ortiq modul tayyor turadi.

Matematika math, random statistics, decimal fractions Vaqt va sana datetime, time calendar zoneinfo Fayl va tizim os, sys, pathlib shutil, glob csv, json Ma'lumot tuzilmasi collections itertools dataclasses Matn va tarmoq re, string urllib, http email Boshqa sqlite3, hashlib logging, unittest threading
Standart kutubxonaning asosiy guruhlari - hech narsa o'rnatish shart emas

math moduli #

Python
import math

print(math.sqrt(144))          # kvadrat ildiz
print(math.ceil(4.2))          # yuqoriga yaxlitlash
print(math.floor(4.8))         # pastga yaxlitlash
print(math.pi)
print(math.pow(2, 10))
print(math.gcd(48, 18))        # eng katta umumiy bo'luvchi
Natija
12.0
5
4
3.141592653589793
1024.0
6

random moduli #

Python
import random

print(random.randint(1, 100))              # 1..100 oralig'ida butun son
print(random.random())                     # 0..1 oralig'ida kasr son
print(random.choice(["olma", "anor", "uzum"]))

talabalar = ["Husanboy", "Sardor", "Malika", "Bekzod"]
random.shuffle(talabalar)                  # aralashtirish
print(talabalar)

print(random.sample(range(1, 50), 6))      # lotereya raqamlari
Natija
73
0.5488135039273248
anor
['Malika', 'Husanboy', 'Bekzod', 'Sardor']
[12, 7, 33, 41, 5, 28]

datetime moduli #

Python
from datetime import datetime, date, timedelta

hozir = datetime.now()
print(hozir)
print(hozir.strftime("%d.%m.%Y %H:%M"))

tugilgan_kun = date(2004, 5, 15)
bugun = date.today()
yosh_kun = (bugun - tugilgan_kun).days
print(f"Siz {yosh_kun} kun yashadingiz ({yosh_kun // 365} yosh)")

kelasi_hafta = bugun + timedelta(days=7)
print(f"Kelasi hafta: {kelasi_hafta.strftime('%d.%m.%Y')}")
Natija
2026-09-08 14:23:11.482915
08.09.2026 14:23
Siz 8151 kun yashadingiz (22 yosh)
Kelasi hafta: 15.09.2026

Paket (package) #

Paket - bu modullar joylashgan papka. Ichida __init__.py fayli bo'lishi kerak (bo'sh bo'lsa ham).

Natija
loyiha/
├── asosiy.py
└── moliya/
    ├── __init__.py
    ├── soliq.py
    └── hisobot.py
Python
# asosiy.py
from moliya import soliq
from moliya.hisobot import chek_chiqar

print(soliq.qqs_hisobla(1_000_000))
chek_chiqar()

pip - tashqi paketlarni o'rnatish #

Standart kutubxonada yo'q narsalar PyPI (Python Package Index) da bor - u yerda 500 000 dan ortiq paket mavjud.

Terminal
pip install requests              # o'rnatish
pip install requests==2.31.0      # aniq versiya
pip install --upgrade requests    # yangilash
pip uninstall requests            # o'chirish
pip list                          # o'rnatilganlar ro'yxati
pip show requests                 # paket haqida ma'lumot
Windows'da pip topilmasa

python -m pip install requests shaklida yozing - bu har doim ishlaydi va to'g'ri Python versiyasiga o'rnatadi.

Mashhur paketlar #

PaketVazifasiO'rnatish
requestsHTTP so'rovlarpip install requests
pandasJadval ma'lumotlari tahlilipip install pandas
numpySonli hisob-kitoblarpip install numpy
matplotlibGrafik chizishpip install matplotlib
flaskVeb-ilova yaratishpip install flask
djangoKatta veb-loyihalarpip install django
beautifulsoup4HTML tahlil qilishpip install beautifulsoup4
openpyxlExcel fayllaripip install openpyxl

Virtual muhit (venv) #

Har bir loyiha o'z paketlariga ega bo'lishi kerak. Aks holda bir loyiha uchun yangilagan paket boshqasini buzishi mumkin.

Virtual muhitsiz Loyiha A: django 3.2 Loyiha B: django 5.0 ⚠ Konflikt! bitta global o'rnatma Loyiha A muhiti django 3.2 requests 2.28 A/venv/ ichida Loyiha B muhiti django 5.0 pandas 2.1 B/venv/ ichida
Virtual muhit har bir loyihaga alohida paketlar to'plamini beradi
Terminal
# Muhit yaratish
python -m venv venv

# Faollashtirish (Windows)
venv\Scripts\activate

# Faollashtirish (Linux / macOS)
source venv/bin/activate

# Endi paketlar faqat shu loyihaga o'rnatiladi
pip install requests pandas

# Paketlar ro'yxatini saqlash
pip freeze > requirements.txt

# Boshqa kompyuterda tiklash
pip install -r requirements.txt

# Chiqish
deactivate
requirements.txt nima uchun kerak?

Bu fayl loyihangiz qaysi paketlarning qaysi versiyalariga bog'liq ekanini yozib qo'yadi. Hamkasbingiz loyihani yuklab olib, bitta buyruq bilan aynan bir xil muhitni tiklaydi. Uni albatta loyiha bilan birga saqlang.

Amaliy misol: o'z modulingiz #

matn_vositalari.py:

Python
# matn_vositalari.py
"""Matn bilan ishlash uchun yordamchi funksiyalar."""


def sozlarni_sana(matn: str) -> int:
    """Matndagi so'zlar sonini qaytaradi."""
    return len(matn.split())


def teskari(matn: str) -> str:
    """Matnni teskari o'giradi."""
    return matn[::-1]


def palindrommi(matn: str) -> bool:
    """Matn palindrom ekanini tekshiradi."""
    tozalangan = "".join(b.lower() for b in matn if b.isalnum())
    return tozalangan == tozalangan[::-1]


def qisqartir(matn: str, uzunlik: int = 50) -> str:
    """Matnni belgilangan uzunlikkacha qisqartiradi."""
    if len(matn) <= uzunlik:
        return matn
    return matn[:uzunlik].rstrip() + "..."


if __name__ == "__main__":
    print(sozlarni_sana("Python juda qulay til"))
    print(teskari("salom"))
    print(palindrommi("A man, a plan, a canal: Panama"))
    print(qisqartir("Bu juda uzun matn bo'lib, uni qisqartirish kerak", 20))
Terminal
python matn_vositalari.py
Natija
4
molas
True
Bu juda uzun matn...

Endi uni boshqa fayldan ishlatamiz:

Python
# asosiy.py
from matn_vositalari import palindrommi, sozlarni_sana

matnlar = ["shosh", "salom", "kok"]

for matn in matnlar:
    holat = "palindrom" if palindrommi(matn) else "palindrom emas"
    print(f"{matn:<10} -> {holat}")
Natija
shosh      -> palindrom
salom      -> palindrom emas
kok        -> palindrom
Amaliy topshiriq
  1. valyuta.py moduli yarating. Unda dollarga(summa_som, kurs) va somga(summa_dollar, kurs) funksiyalari bo'lsin.
  2. Modul ichida KURS = 12800 konstantasini e'lon qiling.
  3. if __name__ == "__main__" blokida ikkala funksiyani sinab ko'ring.
  4. asosiy.py faylidan modulni import qilib, foydalanuvchidan summa so'rang va konvertatsiya qiling.
  5. Virtual muhit yaratib, unga requests paketini o'rnatib ko'ring.

Xulosa #

  • Har bir .py fayl - modul; import orqali boshqa fayldan chaqiriladi.
  • from modul import nom aniqroq, import * dan qoching.
  • if __name__ == "__main__" moduldagi test kodini ajratadi.
  • Standart kutubxonada 200 dan ortiq tayyor modul bor: math, random, datetime, os, json.
  • Tashqi paketlar pip install bilan o'rnatiladi.
  • Har bir loyiha uchun virtual muhit yarating va requirements.txt saqlang.

Keyingi bo'limda ma'lumotlarni doimiy saqlashni - fayllar bilan ishlashni o'rganamiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.