Modul, Package, dan Import di Python
Berhenti menulis semua kode di satu file: pecah jadi modul, import dengan rapi, dan pahami trik __name__.
Analogi singkat: kotak perkakas berlabel
Bayangkan meja kerjamu berantakan: obeng, palu, dan paku tercampur jadi satu. Modul itu seperti kotak perkakas berlabel: obeng di kotak "pertukangan", kabel di kotak "elektronik". Saat butuh, kamu ambil kotaknya (import), bukan mengobrak-abrik seluruh meja. Program yang besar butuh kerapian yang sama.
Kenapa konsep ini ada?
File Python yang berisi ribuan baris itu mimpi buruk: susah dicari, susah dites, susah dipakai ulang. Modul memecah program jadi file-file kecil yang fokus pada satu tugas. Lebih penting lagi, modul memungkinkan pakai ulang: fungsi pembersih data yang kamu tulis sekali bisa diimport ke sepuluh proyek berbeda tanpa copy-paste.
Tiga cara import
# 1. import seluruh modul
import math
print(math.sqrt(16)) # 4.0
# 2. import dengan nama pendek (alias)
import pandas as pd # konvensi standar di dunia data
# 3. import bagian tertentu saja
from math import sqrt, pi
print(sqrt(25), pi)
# 4. import semuanya (JARANG dipakai, bikin nama bentrok)
# from math import *Catatan teknis: Hindari
from x import *di kode produksi. Ia menumpuk semua nama ke file-mu tanpa jejak asal, sehingga dua modul bisa diam-diam menimpa fungsi satu sama lain.
Membuat modul sendiri
Modul tidak lebih dari file .py biasa. Misal kamu buat bersih_data.py:
# file: bersih_data.py
def rapikan_teks(teks):
return " ".join(teks.lower().split())
def ke_rupiah(angka):
return f"Rp{angka:,}".replace(",", ".")Lalu pakai dari file lain di folder yang sama:
# file: analisis.py
import bersih_data
from bersih_data import ke_rupiah
print(bersih_data.rapikan_teks("KOPI SUSU")) # kopi susu
print(ke_rupiah(15000)) # Rp15.000Package: folder berisi modul
Kalau modul sudah banyak, kelompokkan dalam folder yang berisi file __init__.py. Itu namanya package:
proyek/
util/
__init__.py
teks.py
angka.py
main.py
# di main.py
from util.teks import rapikan_teks
from util import angkaTrik name: file yang bisa jadi dua peran
# file: bersih_data.py
def rapikan_teks(teks):
return " ".join(teks.lower().split())
if __name__ == "__main__":
# blok ini HANYA jalan kalau file dieksekusi langsung,
# tidak jalan kalau file diimport orang lain
print(rapikan_teks("TES CEPAT"))python bersih_data.py # mencetak "tes cepat" (tes mandiri)Pola ini standar di hampir semua proyek Python: modul bisa dites sendiri, tapi tetap aman diimport.
Contoh 1: modul util untuk proyek data
# file: dtool.py (data tool)
def rata_rata(data):
return sum(data) / len(data) if data else 0
def buang_kosong(data):
return [x for x in data if x not in (None, "", 0)]# file: laporan.py
from dtool import rata_rata, buang_kosong
nilai = [80, 0, 90, "", 70, None]
bersih = buang_kosong(nilai)
print("Data bersih:", bersih) # [80, 90, 70]
print("Rata-rata:", rata_rata(bersih)) # 80.0Contoh 2: struktur mini proyek analisis
# proyek_analisis/
# loader.py -> def baca_csv(path)
# cleaner.py -> def bersihkan(baris)
# reporter.py -> def ringkasan(data)
# main.py -> orkestrasi
# main.py
from loader import baca_csv
from cleaner import bersihkan
from reporter import ringkasan
def main():
data = baca_csv("penjualan.csv")
data = [bersihkan(b) for b in data]
print(ringkasan(data))
if __name__ == "__main__":
main()Tiap file punya satu tanggung jawab. Kalau ada bug di pembersihan data, kamu tahu persis harus membuka file apa.
Kesalahan umum
SALAH: nama file menabrak modul standar
# file: math.py <- JANGAN! menutupi modul math bawaan Python
import math # malah mengimport file-mu sendiriBENAR: beri nama yang spesifik
# file: hitung_diskon.py <- amanSALAH: import di tengah file secara acak
def proses():
import re # jalan, tapi susah dilacakBENAR: semua import di atas file
import re
def proses():
...Tantangan
Modul Statistik Mini
Buat file statistik.py berisi fungsi rata_rata(data) dan nilai_maks(data). Lalu di file utama, import keduanya dan pakai untuk list [70, 85, 90, 60]. Tambahkan blok if name == "main" berisi tes cepat.