Modul dan Paket¶
Modul dan paket memungkinkan kita mengatur kode Python menjadi unit terpisah yang dapat digunakan ulang.
Tujuan Pembelajaran¶
Setelah mempelajari bab ini, Anda diharapkan mampu:
Menjelaskan perbedaan modul dan paket
Menggunakan beberapa gaya
importdengan tepatMemanfaatkan modul standar Python untuk tugas umum
Mengelola dependensi proyek dengan
pipdan virtual environment
Modul¶
Modul adalah file Python (.py) yang berisi definisi fungsi, kelas, dan variabel.
Membuat Modul¶
Buat file matematika.py:
# matematika.py
PI = 3.14159
def luas_lingkaran(r):
return PI * r ** 2
def keliling_lingkaran(r):
return 2 * PI * r
def luas_persegi(sisi):
return sisi ** 2
Menggunakan Modul¶
# Cara 1: Import seluruh modul (paling aman untuk pemula)
import matematika
print(matematika.PI)
print(matematika.luas_lingkaran(5))
# Cara 2: Import objek spesifik
from matematika import luas_lingkaran, PI
print(PI)
print(luas_lingkaran(5))
# Cara 3: Import semua (hindari)
from matematika import *
# Cara 4: Import dengan alias
import matematika as mat
print(mat.luas_persegi(4))
Peringatan
Hindari from modul import * karena dapat mengotori namespace dan menimbulkan bentrokan nama yang sulit dilacak.
Modul Standar Python¶
Python memiliki banyak modul bawaan yang berguna:
math¶
import math
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
print(math.sqrt(16)) # 4.0
print(math.sin(0)) # 0.0
print(math.log(10)) # 2.302585...
print(math.ceil(4.2)) # 5
print(math.floor(4.8)) # 4
random¶
import random
# Bilangan pecahan acak antara 0 dan 1
print(random.random())
# Bilangan bulat acak dalam rentang [1, 10]
print(random.randint(1, 10))
# Pilih elemen acak dari list
buah = ["apel", "jeruk", "mangga"]
print(random.choice(buah))
# Acak urutan list (in-place)
angka = [1, 2, 3, 4, 5]
random.shuffle(angka)
print(angka)
# Ambil sampel unik sebanyak 5 elemen
print(random.sample(range(100), 5))
datetime¶
from datetime import datetime, date, timedelta
# Waktu sekarang
sekarang = datetime.now()
print(sekarang)
# Tanggal hari ini
hari_ini = date.today()
print(hari_ini)
# Format tanggal
print(sekarang.strftime("%d/%m/%Y %H:%M:%S"))
# Parsing string ke datetime
tgl = datetime.strptime("25/12/2026", "%d/%m/%Y")
print(tgl)
# Operasi dengan timedelta
besok = hari_ini + timedelta(days=1)
minggu_depan = hari_ini + timedelta(weeks=1)
print(f"Besok: {besok}")
print(f"Minggu depan: {minggu_depan}")
os¶
import os
# Direktori kerja saat ini
print(os.getcwd())
# Daftar file dalam direktori
print(os.listdir("."))
# Membuat direktori
# os.mkdir("folder_baru")
# Cek keberadaan file/folder
print(os.path.exists("file.txt"))
# Mendapatkan nama file dan direktori
path = os.path.join("home", "user", "dokumen", "file.txt")
print(os.path.basename(path)) # nama berkas
print(os.path.dirname(path)) # direktori induk
# Menggabungkan path
full_path = os.path.join("folder", "subfolder", "file.txt")
print(full_path)
pathlib (Penanganan Path Modern)¶
from pathlib import Path
# Path saat ini
cwd = Path.cwd()
print(cwd)
# Home directory
home = Path.home()
print(home)
# Membuat path
p = Path("folder") / "subfolder" / "file.txt"
print(p)
# Cek keberadaan
print(p.exists())
# Mendapatkan ekstensi
print(Path("data.csv").suffix) # .csv
# Iterasi file dalam direktori
for file in Path(".").glob("*.py"):
print(file)
json¶
import json
# Python dict ke JSON string
data = {"nama": "Ahmad", "umur": 25}
json_str = json.dumps(data, indent=2)
print(json_str)
# JSON string ke Python dict
parsed = json.loads(json_str)
print(parsed["nama"])
# Menulis ke file JSON
with open("data.json", "w") as f:
json.dump(data, f, indent=2)
# Membaca dari file JSON
with open("data.json", "r") as f:
loaded = json.load(f)
print(loaded)
collections¶
from collections import Counter, defaultdict, namedtuple
# Counter - menghitung frekuensi
kata = ["apel", "jeruk", "apel", "mangga", "apel", "jeruk"]
counter = Counter(kata)
print(counter) # Counter({'apel': 3, 'jeruk': 2, 'mangga': 1})
print(counter.most_common(2)) # [('apel', 3), ('jeruk', 2)]
# defaultdict - dict dengan nilai default
dd = defaultdict(list)
dd["buah"].append("apel")
dd["buah"].append("jeruk")
print(dd) # defaultdict(<class 'list'>, {'buah': ['apel', 'jeruk']})
# namedtuple - tuple dengan nama field
Titik = namedtuple("Titik", ["x", "y"])
p = Titik(10, 20)
print(p.x, p.y) # 10 20
itertools¶
Modul itertools menyediakan fungsi-fungsi untuk bekerja dengan iterator secara efisien, termasuk operasi kombinatorik seperti permutasi, kombinasi, dan Cartesian product.
Untuk materi lengkap tentang permutasi, kombinasi, faktorial, Cartesian product, dan aplikasinya dalam probabilitas dan statistik, lihat:
Paket¶
Paket adalah direktori yang berisi modul-modul Python.
Dalam praktik modern, paket bisa berupa namespace package (tanpa __init__.py). Namun, untuk pembelajaran dasar, tetap disarankan memakai __init__.py agar struktur paket eksplisit dan mudah dipahami.
Struktur Paket¶
mypackage/
├── __init__.py
├── modul_a.py
├── modul_b.py
└── subpackage/
├── __init__.py
└── modul_c.py
Membuat Paket¶
# mypackage/__init__.py
"""Paket utama mypackage."""
from .modul_a import fungsi_a
from .modul_b import fungsi_b
__version__ = "1.0.0"
# mypackage/modul_a.py
def fungsi_a():
return "Dari modul A"
# mypackage/modul_b.py
def fungsi_b():
return "Dari modul B"
# mypackage/subpackage/__init__.py
from .modul_c import fungsi_c
# mypackage/subpackage/modul_c.py
def fungsi_c():
return "Dari modul C di subpackage"
Menggunakan Paket¶
# Import dari paket
import mypackage
print(mypackage.fungsi_a())
# Import modul spesifik
from mypackage import modul_a
print(modul_a.fungsi_a())
# Import dari subpackage
from mypackage.subpackage import modul_c
print(modul_c.fungsi_c())
# Import langsung
from mypackage.subpackage.modul_c import fungsi_c
print(fungsi_c())
Instalasi Paket Eksternal¶
pip¶
# Instal paket
python -m pip install numpy
# Instal versi spesifik
python -m pip install numpy==1.24.0
# Instal dari requirements.txt
python -m pip install -r requirements.txt
# Lihat paket terinstal
python -m pip list
# Copot paket
python -m pip uninstall numpy
requirements.txt¶
# requirements.txt
numpy>=1.24.0
pandas>=2.0.0
scikit-learn>=1.3.0
torch>=2.0.0
Virtual Environment dan Dependensi¶
Membuat Virtual Environment¶
# Buat virtual environment
python -m venv .venv
# Aktivasi
source .venv/bin/activate # Linux/macOS
.\.venv\Scripts\activate # Windows (PowerShell)
# Instal dependensi
python -m pip install -r requirements.txt
# Ekspor dependensi terpasang
python -m pip freeze > requirements.txt
Catatan
pip freeze cocok untuk mengunci dependensi lingkungan proyek saat ini. Untuk modul ajar atau pustaka, gunakan pin versi secara sadar (tidak selalu semua paket perlu dibekukan).
if name == “main”¶
Idiom untuk menjalankan kode hanya jika file dieksekusi langsung:
# utils.py
def fungsi_helper():
return "Helper"
def main():
print("Program utama")
print(fungsi_helper())
if __name__ == "__main__":
main()
Jika dijalankan langsung:
python utils.py→ main() dieksekusiJika diimpor:
import utils→main()tidak dieksekusi
Latihan¶
Buat modul
geometri.pydengan fungsi untuk menghitung luas berbagai bangun datarBuat paket
toolsdengan submodultextdanmathGunakan modul
randomuntuk membuat program undian sederhanaEksplorasi modul
datetimeuntuk membuat kalkulator usia