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.

../../_images/fastfood.py.png

Fig. 2 Modul fastfood.py

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.

../../_images/lunch.py.png

Fig. 3 Modul utama 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 modul fastfood.

  • Modul fastfood yang mengimpor modul bawaan Python atau Python’s Standard Library bernama random.

Kita juga melakukan impor dengan dua cara berbeda:

  • Pertama, kita mengimpor seluruh objek yang ada dalam fastfood dengan pernyataan import fastfood. Dengan cara ini, kita bisa menggunakan fungsi pick yang ada di dalamnya dengan awalan fastfood. (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 modul lunch atau pada modul lain.

  • Kedua, kita menggunakan pernyataan from random import choice pada modul fastfood yang menyebabkan hanya fungsi choice 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
../../_images/questions.py.png

Fig. 4 Modul questions.py

../../_images/fastfood.py.png

Fig. 5 Modul choices/fastfood.py yang ada di dalam choices

../../_images/choices.advice.py.png

Fig. 6 Modul choices/advice.py yang ada di dalam choices

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!