Skip to main content

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.py merupakan module.
  • __init__.py merupakan 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:

KonsepBentukFungsi
ModuleFile .pyMengorganisasi kode dalam satu file
PackageDirektoriMengelompokkan beberapa module
__init__.pyFile PythonBagian 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.