Teori packaging pada Section Virtual Environments dan Dependencies berakhir pada satu pertanyaan praktis: bagaimana rasanya membuat package sendiri dari nol sampai bisa dipasang dengan pip? Proyek ini menjawabnya dengan membangun satu library kecil bernama example-package — kumpulan utilitas pengolah teks — lalu membawanya menempuh siklus hidup package modern secara utuh: struktur src layout, metadata pyproject.toml, test suite pytest, sampai artefak wheel yang siap diunggah ke PyPI.

Library-nya sengaja dibuat kecil agar perhatian kita tertuju pada proses, bukan pada panjangnya kode. Seluruh isi package hanya tiga function:

  • slugify() mengubah teks menjadi slug URL — "Belajar Python Dasar!" menjadi "belajar-python-dasar".
  • hitung_kata() menghitung jumlah kata pada sebuah teks, tahan terhadap whitespace berulang.
  • ringkas() memotong teks panjang agar tidak melebihi batas tertentu, dengan akhiran yang bisa dikustom.

Peta Pengerjaan #

Proyek dikerjakan dalam empat bagian yang saling menyambung — hasil satu bagian menjadi titik awal bagian berikutnya:

BagianFokusHasil akhir
Bagian 1Struktur packageFolder src layout dan pyproject.toml pertama
Bagian 2Implementasi moduleexample_package dengan tiga function berdokumentasi
Bagian 3Testing packageTest suite pytest, seluruh test lulus
Bagian 4Build dan distribusiWheel dan sdist terverifikasi, langkah unggah TestPyPI

Prasyarat #

Alat yang dibutuhkan sudah dibahas pada teori:

  • Python 3.10 atau lebih baru — seluruh kode proyek ini diuji pada Python 3.12.
  • pytest untuk Bagian 3; cara memasangnya dibahas pada Chapter Menggunakan pip.
  • Package build untuk Bagian 4; kita memasangnya ke dalam virtual environment khusus supaya lingkungan utama tetap bersih.

Satu kebiasaan dari Chapter Membuat Virtual Environment tetap berlaku: bekerja di dalam venv. Namun karena package contoh ini tidak punya dependency selain pytest, pembaca boleh memakai interpreter sistem dulu dan baru membuat venv ketika tiba di Bagian 4.

Seluruh perintah pada empat bagian berikutnya dijalankan sungguhan saat materi ini ditulis — setiap blok output adalah hasil eksekusi nyata, bukan perkiraan. Satu-satunya bagian ilustratif adalah transkrip unggah ke TestPyPI pada Bagian 4, karena unggahan sungguhan membutuhkan akun milik pembaca sendiri.