Packages
Apa Itu Package?
Pada materi sebelumnya, kita telah mempelajari Module, yaitu file Python dengan ekstensi .py yang digunakan untuk mengorganisasi kode.
Ketika sebuah proyek semakin besar, jumlah module juga dapat bertambah. Jika semua module ditempatkan dalam satu direktori, struktur proyek dapat menjadi sulit dikelola.
Python menyediakan konsep Package untuk mengelompokkan beberapa module ke dalam sebuah direktori berdasarkan fungsi atau tanggung jawabnya.
Secara sederhana:
Module → satu file .py
Package → satu folder yang berisi beberapa module
Contohnya:
my_project/
├── main.py
└── shopping/
├── __init__.py
└── shopping_cart.py
Pada struktur tersebut:
shopping/merupakan package.shopping_cart.pymerupakan module.__init__.pymerupakan file yang berada di dalam package.
Mengapa Membutuhkan Package?
Pada proyek sederhana, beberapa module mungkin masih mudah dikelola dalam satu direktori.
Namun, ketika aplikasi berkembang, kita dapat memiliki banyak bagian seperti:
Authentication
Database
User
Shopping
Payment
Reporting
Utility
Jika semuanya ditempatkan dalam satu folder:
project/
├── authentication.py
├── database.py
├── user.py
├── shopping.py
├── payment.py
├── reporting.py
├── utility.py
└── main.py
jumlah file dapat menjadi semakin banyak.
Package memungkinkan module-module tersebut dikelompokkan berdasarkan fungsinya.
Contohnya:
project/
├── main.py
│
├── authentication/
│ ├── __init__.py
│ └── login.py
│
├── database/
│ ├── __init__.py
│ └── connection.py
│
└── shopping/
├── __init__.py
└── shopping_cart.py
Dengan struktur tersebut, codebase menjadi lebih terorganisir.
Struktur Package
Struktur dasar sebuah package dapat dibuat seperti berikut:
my_project/
│
├── main.py
│
└── shopping/
├── __init__.py
└── shopping_cart.py
Di dalam shopping_cart.py kita dapat membuat function:
def buy(item):
cart = []
cart.append(item)
return cart
Module tersebut sekarang berada di dalam package shopping.
Mengimpor Module dari Package
Module yang berada di dalam package dapat diimpor menggunakan notasi titik (.).
Misalnya:
import shopping.shopping_cart
Setelah module diimpor, function di dalamnya dapat digunakan melalui:
shopping.shopping_cart.buy("apple")
Contoh lengkap:
import shopping.shopping_cart
print(shopping.shopping_cart.buy("apple"))
Output:
["apple"]
Struktur pemanggilannya dapat dipahami sebagai:
package
↓
module
↓
function
atau:
shopping.shopping_cart.buy()
Mengimpor Function Secara Langsung
Selain mengimpor seluruh module, kita juga dapat mengimpor function tertentu dari module di dalam package.
Gunakan:
from shopping.shopping_cart import buy
Setelah itu, function dapat dipanggil secara langsung:
print(buy("apple"))
Output:
["apple"]
Perbandingan kedua pendekatan:
import shopping.shopping_cart
shopping.shopping_cart.buy("apple")
dan:
from shopping.shopping_cart import buy
buy("apple")
Keduanya dapat digunakan untuk mengakses function yang sama.
File __init__.py
Dalam struktur package tradisional Python, kita sering menemukan file:
__init__.py
Contohnya:
shopping/
├── __init__.py
└── shopping_cart.py
File __init__.py digunakan sebagai bagian dari struktur package Python.
Pada banyak kasus, file tersebut dapat dibiarkan kosong:
Kehadirannya saja sudah cukup untuk kebutuhan package pada struktur tradisional Python.
Apakah __init__.py Harus Selalu Ada?
Pada Python modern, sebuah direktori dapat berfungsi sebagai namespace package tanpa __init__.py.
Namun, ketika mempelajari konsep package dasar dan struktur package tradisional, penggunaan:
__init__.py
masih sangat umum dan membantu memperjelas bahwa sebuah direktori dimaksudkan sebagai package.
Karena itu, untuk pembelajaran dasar, struktur berikut tetap baik digunakan:
shopping/
├── __init__.py
└── shopping_cart.py
Package dan Module
Hubungan antara module dan package dapat digambarkan:
Project
↓
Package
↓
Module
↓
Function / Class / Variable
Contohnya:
my_project/
│
├── main.py
│
└── shopping/
│
├── __init__.py
│
└── shopping_cart.py
Pada struktur tersebut:
shopping/
↓
Package
shopping_cart.py
↓
Module
Package untuk Organisasi Kode
Package tidak hanya digunakan untuk membuat struktur folder, tetapi juga membantu mengelompokkan kode berdasarkan tanggung jawab.
Misalnya aplikasi memiliki beberapa fitur:
project/
├── main.py
│
├── users/
│ ├── __init__.py
│ └── user.py
│
├── payments/
│ ├── __init__.py
│ └── payment.py
│
├── database/
│ ├── __init__.py
│ └── connection.py
│
└── utilities/
├── __init__.py
└── helper.py
Dengan struktur tersebut, developer dapat lebih mudah menemukan kode yang berkaitan dengan fitur tertentu.
Package dan Reusability
Salah satu keuntungan package adalah membantu membuat kode yang lebih mudah digunakan kembali.
Misalnya module:
shopping/shopping_cart.py
memiliki berbagai function yang berhubungan dengan shopping cart.
Module tersebut dapat digunakan oleh bagian aplikasi yang membutuhkan functionality tersebut.
Secara konseptual:
shopping/
↓
shopping_cart.py
↓
Function shopping cart
↓
Digunakan oleh module lain
Dengan demikian, kode tidak perlu ditulis ulang pada setiap bagian aplikasi.
Hirarki Module dan Package
Secara sederhana, struktur organisasi kode Python dapat dipahami seperti berikut:
Project
│
├── Module
│ └── file.py
│
└── Package
├── __init__.py
├── module_a.py
├── module_b.py
└── module_c.py
Jadi:
| Konsep | Bentuk | Fungsi |
|---|---|---|
| Module | File .py | Mengorganisasi kode dalam satu file |
| Package | Direktori | Mengelompokkan beberapa module |
__init__.py | File Python | Bagian dari struktur package tradisional |
Kesimpulan
Package digunakan untuk mengelompokkan beberapa module Python ke dalam sebuah direktori sehingga struktur proyek menjadi lebih terorganisir.
Perbedaan sederhananya:
Module
= satu file .py
Package
= direktori yang mengelompokkan module
Contoh struktur:
my_project/
├── main.py
└── shopping/
├── __init__.py
└── shopping_cart.py
Module di dalam package dapat digunakan dengan:
import shopping.shopping_cart
atau function tertentu dapat diimpor langsung:
from shopping.shopping_cart import buy
Pemahaman mengenai module dan package menjadi dasar penting sebelum mempelajari struktur proyek Python yang lebih besar, termasuk package pihak ketiga, Python Standard Library, virtual environment, dan dependency management.