Modules and Packages¶
Pada bagian ini, kita akan mulai membuat sebuah program Python secara menyeluruh dengan menerapkan semua yang sudah kita pelajari sebelumnya. Kita akan menulis modul buatan kita sendiri dan menggunakan modul bawaan dari Python, atau yang disebut dengan Python’s Standard Library dan modul-modul lainnya. Hal ini akan menjadi dasar melangkah ke chapter selanjutnya karena ke depannya kita akan menggunakan banyak sekali modul-modul buatan komunitas dan organisasi di luar sana.
Apa Itu Modul (Module)?¶
Modul sebenarnya adalah sebuah file Python dengan format .py
. Semua file Python (modul) dapat digunakan oleh file Python (modul) yang lain. Yang dimaksud dengan “menggunakan” di sini adalah menggunakan kode yang ada pada modul tersebut seolah-olah kode tersebut juga ditulis pada modul yang menggunakannya.
Kita bisa memanggil dan menggunakan kode dari modul lain dengan menggunakan pernyataan import
. Pernyataan import
akan memuat semua objek yang ada di dalam modul lain dan bisa diakses oleh kode yang ada dalam modul yang memanggilnya.
Mengimpor Modul¶
Cara sederhana penggunaan import
adalah import module
, dengan module
adalah nama file Python yang ingin kita gunakan (tanpa ekstensi .py
).
Misalkan, kita ingin memilih makanan untuk makan siang dari sekian banyak layanan cepat saji. Daripada kita repot berpikir atau berdiskusi dengan yang lain, mari kita biarkan komputer untuk memilih. Kita buat sebuah modul program yang berisi fungsi yang mengembalikan pilihan makanan cepat saji secara acak.
Kemudian, kita buat program utama kita dalam lunch.py
yang akan mengimpor semua objek dalam fastfood.py
ke dalam lunch.py
untuk bisa diakses dan digunakan. Berikut kode program utama kita di lunch.py
.
Jika kedua file tersebut berada dalam satu direktori yang sama, maka kita bisa menjalankan program utama lunch.py
seperti di bawah ini.
!python lunch.py
Let's go to Burger King for lunch
!python lunch.py
Let's go to Pizza Hut for lunch
!python lunch.py
Let's go to Lawless for lunch
Dari dua file Python tersebut, kita melakukan impor modul di dua tempat berbeda:
Program utama
lunch.py
yang mengimpor modulfastfood
.Modul
fastfood
yang mengimpor modul bawaan Python atau Python’s Standard Library bernamarandom
.
Kita juga melakukan impor dengan dua cara berbeda:
Pertama, kita mengimpor seluruh objek yang ada dalam
fastfood
dengan pernyataanimport fastfood
. Dengan cara ini, kita bisa menggunakan fungsipick
yang ada di dalamnya dengan awalanfastfood.
(seperti pada akses atribut dan metode objek sebelumnya) sebelum nama fungsinya. Ini berguna agar tidak terjadi konflik jikalau ada fungsi dengan nama yang sama,pick
pada modullunch
atau pada modul lain.Kedua, kita menggunakan pernyataan
from random import choice
pada modulfastfood
yang menyebabkan hanya fungsichoice
saja yang tersedia untuk digunakan. Ini sangat direkomendasikan jika memang kita hanya menggunakan salah satu atau beberapa fungsi/kelas/variabel saja dari suatu modul dan tidak ingin mengakses semua objek di dalamnya karena alasan efisiensi memori.
Warning
Kita bisa mengimpor seperti pada kasus kedua dengan pertimbangan bahwa tidak akan terjadi konflik dengan fungsi/kelas/variabel atau objek lainnya dengan nama yang sama, choice
.
Mengimpor Modul dengan Alias¶
Bagaimanana jika ternyata ada objek bernama fastfood
juga dalam program utama lunch.py
? Bagaimana kita bisa mengimpor modul fastfood
?
Untuk mengatasi konflik tersebut, kita memiliki opsi untuk mengimpor sebuah modul atau bagian dari modul dengan menggunakan sebuah alias. Alias berarti kita mengimpor suatu modul dan kemudian membuat sebuah alias dengan nama lain. Ini bisa dilakukan dengan menambahkan kata kunci as
pada setiap objek yang diimpor.
Sebagai contoh, kita bisa memodifikasi program utama lunch.py
untuk mengimpor fastfood
menggunakan alias seperti di bawah ini.
import fastfood as ff
place = ff.pick()
print("Let's go to {} for lunch.".format(place))
Impor Hanya Yang Dibutuhkan¶
Kita sudah menerapkan hal ini pada kasus kedua sebelumnya, di mana kita hanya mengimpor fungsi choice
dari modul random
. Sebagai contoh, karena kita hanya membutuhkan fungsi pick
pada modul fastfood
dan tidak membutuhkan places
, kita bisa memodifikasi lagi program utama lunch.py
menjadi berikut.
from fastfood import pick
place = pick()
print("Let's go to {} for lunch.".format(place))
Atau, kita gunakan alias seperti di bawah ini.
from fastfood import pick as fastpick
place = fastpick()
print("Let's go to {} for lunch.".format(place))
Python juga menyediakan beberapa modul yang bisa langsung kita gunakan. Contohnya, modul math
bisa membantu kita untuk menghitung operasi-operasi matematika yang lebih kompleks.
Eksplorasi
Impor pustaka standar Python math
dan gunakan modul math
untuk menghitung \(e^3\).
# KETIK DI SINI
Paket dalam Python¶
Secara singkat, paket (package) dalam Python berarti kumpulan modul dalam sebuah folder (kumpulan file berekstensi .py
dalam sebuah folder). Dengan adanya package, kita bisa membuat beberapa modul yang dikelompokkan dalam sebuah direktori dengan tugas khusus. Sebuah package bisa saja terdiri dari beberapa sub-package, yang berarti direktori yang memiliki sub-direktori.
Satu hal yang dibutuhkan agar Python mengenali bahwa sebuah direktori bukan direktori biasa, melainkan sebuah package, adalah modul __init__.py
. Modul __init__.py
umumnya hanya file berekstensi .py
kosong. Meski begitu, kita juga bisa mengisinya dengan objek/fungsi/kelas/variabel layaknya modul pada umumnya.
Note
File __init__.py
sebenarnya dibutuhkan oleh Python versi 3.3 ke belakang untuk mengenali sebuah direktori adalah package.
Sekarang, mari kita coba buat sebuah package yang memanfaatkan modul-modul yang sudah kita buat sebelumnya. Struktur direktori yang akan kita buat adalah seperti di bawah ini.
|--- questions.py
|--- choices
|--- fastfood.py
|--- advice.py
Untuk menjalankan program utama questions.py
, tempatkan questions.py
sejajar dengan direktori choices
.
!python questions.py
Let's go to Burger King for lunch!
Should we take out? Let me think first
!python questions.py
Let's go to Lawless for lunch!
Should we take out? Sorry, what?
!python questions.py
Let's go to Pizza Hut for lunch!
Should we take out? Yes!