{count, plural, one {Kursus} other {Kursus}}
Saat pertama kali belajar Python, Anda menulis semuanya dalam satu berkas. Itu masih berfungsi untuk skrip kecil, tetapi seiring program Anda berkembang, satu berkas menjadi sulit dibaca, sulit dirawat, dan mustahil digunakan kembali di berbagai proyek. Solusi yang ditawarkan Python adalah modul.
Dalam tutorial ini, Anda akan mempelajari apa itu modul, cara mengimpornya, cara menulis modul sendiri, serta praktik terbaik yang membedakan skrip pemula dari kode siap produksi. Dan sebelum Anda mulai menulis modul sendiri, saya sarankan melihat kursus Intro to Python for Data Science kami.
Apa Itu Modul Python?
Modul pada dasarnya adalah sebuah berkas Python. Setiap berkas dengan ekstensi .py yang berisi kode Python — fungsi, kelas, variabel, atau logika yang dapat dijalankan — adalah sebuah modul. Ketika Anda menyimpan berkas bernama calculation.py, Anda telah membuat modul bernama calculation.
Kekuatan modul berasal dari kemampuan untuk mengimpornya ke program lain. Alih-alih menyalin dan menempel fungsi yang sama ke banyak skrip, Anda mendefinisikannya sekali dalam sebuah modul dan mengimpornya saat diperlukan. Inilah cara pustaka standar Python bekerja: kumpulan modul siap pakai seperti math, os, dan random yang dapat Anda tarik ke program mana pun dengan satu baris.
Lebih spesifiknya, ada tiga jenis modul yang akan Anda temui di Python:
-
Modul bawaan: dibundel dengan Python itu sendiri, seperti
mathdanos, seperti yang baru saja saya sebutkan. -
Modul pihak ketiga: diinstal melalui
pip, sepertinumpyataupandas. -
Modul Anda sendiri: berkas
.pyapa pun yang Anda tulis sendiri.
Mengimpor Modul di Python
Untuk menggunakan fungsionalitas di dalam modul apa pun, Anda harus mengimpornya ke program saat ini. Anda perlu menggunakan kata kunci import bersama nama modul yang diinginkan. Ketika interpreter menemukan pernyataan import, ia akan mengimpor modul tersebut ke program Anda.
Anda dapat menggunakan fungsi di dalam sebuah modul dengan menggunakan operator titik (.) bersama nama modul.
Pertama, mari lihat cara menggunakan modul pustaka standar. Pada contoh di bawah, modul math diimpor ke program sehingga Anda dapat menggunakan fungsi sqrt().
import math # Import the math module
num = 4
print(math.sqrt(num)) # Call the sqrt() function from the math module
Demi efisiensi, setiap modul hanya diimpor sekali per sesi interpreter. Oleh karena itu, jika Anda mengubah modul, Anda harus memulai ulang interpreter.
Jika Anda ingin memuat ulang modul yang sudah Anda impor (mis. setelah mengeditnya), gunakan importlib.reload().
Perhatikan bahwa bawaan lama reload() tidak lagi ada di Python 3 — importlib.reload() adalah cara terkini dan resmi untuk memuat ulang modul di Python 3.4+
import importlib
importlib.reload(module_name)
Catatan: Memuat ulang sys, __main__, builtins, dan modul kunci lainnya tidak direkomendasikan. Banyak modul ekstensi tidak dirancang untuk diinisialisasi lebih dari sekali dan dapat gagal dengan cara yang tidak terduga saat dimuat ulang. Batasi memuat ulang modul Anda sendiri hanya selama pengembangan.
Segera hadir: Python memperkenalkan "lazy imports." Fitur ini akan mempercepat waktu mulai dengan menunda pemuatan modul hingga pertama kali digunakan. Ini bermanfaat karena, terutama dalam proyek besar, banyak modul diimpor di bagian atas berkas, tetapi tidak langsung dibutuhkan.
Cara Menulis Modul Python Sendiri
Sekarang setelah Anda mempelajari cara mengimpor modul ke program, saatnya menulis modul Anda sendiri dan menggunakannya di program lain. Menulis modul sama seperti menulis berkas Python biasa. Mari mulai dengan menulis fungsi untuk menjumlahkan/mengurangkan dua angka dalam berkas calculation.py.
def add(x,y):
return (x+y)
def sub(x,y):
return (x-y)
Jika Anda mencoba mengeksekusi skrip ini di baris perintah, tidak akan terjadi apa-apa karena Anda belum memberi instruksi apa pun kepada program. Buat skrip Python lain di direktori yang sama dengan nama module_test.py dan tuliskan kode berikut ke dalamnya.
import calculation #Importing calculation module
print(calculation.add(1,2)) #Calling function defined in the calculation module
Jika Anda mengeksekusi module_test.py, Anda akan melihat output "3". Ketika interpreter menemukan pernyataan import, ia mengimpor modul calculation ke kode Anda dan kemudian dengan menggunakan operator titik, Anda dapat mengakses fungsi add().
Melindungi kode yang dapat dijalankan dengan if __name__ == "main__"
Ada satu kebiasaan penting saat menulis modul: membungkus kode apa pun yang hanya ingin Anda jalankan secara langsung (bukan saat diimpor) dalam penjaga if __name__ == "__main__".
# calculation.py
def add(x, y):
return x + y
def sub(x, y):
return x - y
if __name__ == "__main__":
# This only runs when you execute calculation.py directly
# It will NOT run when another script imports this module
print(add(1, 2))
__name__ menjadi "__main__". Saat diimpor oleh skrip lain, __name__ akan disetel menjadi nama berkas modul tersebut. Ini berarti pernyataan print di atas tidak akan berjalan tanpa disengaja ketika seseorang mengimpor calculation ke dalam program mereka sendiri.Cara Lain untuk Mengimpor Modul di Python
Ada lebih banyak cara untuk mengimpor modul:
-
pernyataan
from .. import -
pernyataan
from .. import * -
mengganti nama modul yang diimpor
Menggunakan from module import name
Pernyataan from..import memungkinkan Anda mengimpor fungsi/variabel tertentu dari sebuah modul alih-alih mengimpor semuanya. Pada contoh sebelumnya, saat Anda mengimpor calculation ke module_test.py baik fungsi add() maupun sub() ikut diimpor. Namun bagaimana jika Anda hanya membutuhkan fungsi add() dalam kode Anda? Berikut contoh untuk menggambarkan penggunaan from..import.
from calculation import add
print(add(1,2))
Pada contoh di atas, hanya fungsi add() yang diimpor dan digunakan. Perhatikan penggunaan add()? Kini Anda dapat mengaksesnya langsung tanpa menggunakan nama modul. Anda juga dapat mengimpor beberapa atribut sekaligus, dipisahkan dengan koma dalam pernyataan import. Lihat contoh berikut:
from calculation import add,sub
Menggunakan from module import *
Anda dapat mengimpor semua atribut dari sebuah modul menggunakan pernyataan ini. Ini akan membuat semua atribut modul yang diimpor terlihat dalam kode Anda.
Berikut contoh untuk menggambarkan penggunaan from .. import *:
from calculation import *
print(add(1,2))
print(sub(3,2))
Catatan bahwa dalam praktik profesional, Anda sebaiknya menghindari penggunaan from..import dan from..import*. Ini mencemari namespace Anda dengan setiap nama dari modul tersebut, membuat pembaca kode tidak dapat mengetahui asal suatu fungsi, dan dapat menimpa nama yang sudah Anda definisikan tanpa disadari. Gunakan import eksplisit sebagai gantinya.
Mengganti Nama Modul di Python
Anda dapat mengganti nama modul yang Anda impor, yang bisa berguna ketika Anda ingin memberikan nama yang lebih bermakna atau nama modul terlalu panjang untuk sering digunakan. Anda dapat menggunakan kata kunci as untuk menggantinya. Contoh berikut menjelaskan cara menggunakannya dalam program Anda.
import calculation as cal
print(cal.add(1,2))
Anda menghemat beberapa ketukan dengan mengganti nama calculation menjadi cal.
Catatan bahwa sekarang Anda tidak bisa lagi menggunakan calculation.add(1,2), karena calculation tidak lagi dikenali dalam program Anda. Yang terjadi: Setelah Anda memberi alias pada modul dengan as, nama aslinya tidak lagi tersedia dalam skrip tersebut.
Jalur Pencarian Modul di Python
Anda mungkin membutuhkan modul Anda untuk digunakan di berbagai program atau proyek dan lokasi fisiknya dalam direktori bisa berbeda. Jika Anda ingin menggunakan modul yang berada di direktori lain, Python menyediakan beberapa opsi.
Saat Anda mengimpor modul bernama calculation, interpreter terlebih dahulu mencari modul bawaan dengan nama tersebut. Jika tidak ditemukan, ia akan mencari berkas bernama calculation.py dalam daftar direktori yang diberikan oleh variabel sys.path. sys.path berisi lokasi-lokasi berikut:
-
Direktori yang berisi skrip masukan (atau direktori saat ini)
-
PYTHONPATH(daftar nama direktori dengan sintaks yang sama seperti variabel shellPATH) -
Nilai bawaan yang bergantung pada instalasi
Misalkan module_test.py berada di direktori /home/datacamp/, dan Anda memindahkan calculation.py ke /home/test/. Anda dapat memodifikasi sys.path untuk memasukkan /home/test/ ke daftar jalur yang akan digunakan interpreter Python untuk mencari modul. Untuk itu, Anda perlu memodifikasi module_test.py sebagai berikut:
import sys
sys.path.append('/home/test/')
import calculation
print(calculation.add(1,2))
Berkas Terkonpilasi Byte di Python
Mengimpor modul menambah waktu eksekusi program, sehingga Python memiliki beberapa trik untuk mempercepatnya. Salah satunya adalah membuat berkas terkompilasi byte dengan ekstensi .pyc.
Secara internal, Python mengonversi kode sumber menjadi bentuk perantara yang disebut bytecode. Lalu ia menerjemahkannya ke bahasa asli komputer Anda dan menjalankannya. Berkas .pyc ini berguna ketika Anda mengimpor modul tersebut lain kali dari program yang berbeda — prosesnya akan jauh lebih cepat karena sebagian pemrosesan yang diperlukan untuk mengimpor modul sudah dilakukan. Selain itu, berkas terkompilasi byte ini bersifat lintas platform.
Catatan bahwa berkas .pyc ini biasanya dibuat di direktori yang sama dengan berkas .py yang bersesuaian. Jika Python tidak memiliki izin untuk menulis ke berkas di direktori tersebut, maka berkas .pyc tidak akan dibuat. Berkas-berkas ini biasanya disimpan di direktori __pycache__ berdampingan dengan berkas .py Anda, dengan nama seperti calculation.cpython-312.pyc yang mencerminkan versi Python yang digunakan. Anda dapat dengan aman mengabaikan atau menambahkan folder ini ke .gitignore. Python menanganinya secara otomatis.
Fungsi dir() di Python
Fungsi dir() digunakan untuk mengetahui semua nama yang didefinisikan dalam sebuah modul. Fungsi ini mengembalikan daftar string yang diurutkan berisi nama-nama yang didefinisikan dalam modul.
import calculation
print(calculation.add(1,2))
print(dir(calculation))
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'sub']
Pada output, Anda dapat melihat nama fungsi yang Anda definisikan di modul, add & sub. Atribut __name__ berisi nama modul. Semua atribut yang diawali garis bawah adalah atribut bawaan Python yang terkait dengan sebuah modul.
Kesimpulan
Membuat modul diperlukan untuk pengelolaan kode yang lebih baik dan keterpakaiulangannya. Python menyediakan beberapa modul bawaan yang dapat diimpor menggunakan kata kunci import. Python juga memungkinkan Anda membuat modul sendiri dan menggunakannya dalam program Anda. Python menghasilkan berkas terkompilasi byte untuk mengatasi biaya penggunaan modul, sehingga eksekusi lebih cepat. Anda dapat menggunakan dir() untuk mengetahui atribut yang didefinisikan dalam modul yang digunakan dalam program. Ini dapat digunakan baik pada modul pra-definisi maupun modul buatan pengguna.
Jika Anda ingin mempelajari lebih lanjut tentang Python, Anda dapat melihat kursus Intermediate Python for Data Science kami.
FAQs
Bisakah saya mengimpor modul di dalam sebuah fungsi?
Ya. Anda dapat mengimpor modul di dalam fungsi, tetapi umumnya lebih baik mengimpor di bagian atas berkas demi kejelasan dan kinerja.
Apa yang terjadi jika dua modul memiliki nama yang sama?
Python akan mengimpor kecocokan pertama yang ditemukannya dalam jalur pencarian modul (sys.path). Berhati-hatilah dengan penamaan untuk menghindari konflik.
Apakah saya perlu mengompilasi modul saya menjadi .pyc secara manual?
Tidak. Python secara otomatis membuat berkas .pyc ketika Anda mengimpor modul—jika izin tulis tersedia.
Bagaimana cara memeriksa dari mana sebuah modul diimpor?
Gunakan atribut __file__ milik modul:
import math
print(math.__file__)
Apakah boleh menggunakan from module import *?
Bisa saja, tetapi tidak direkomendasikan dalam kode produksi. Ini dapat mencemari namespace dan menyulitkan pelacakan apa yang digunakan.
Bisakah saya memuat ulang modul setelah mengeditnya?
Ya, dalam sesi interaktif, gunakan importlib.reload():
import importlib
import mymodule
importlib.reload(mymodule)
