Materi Course Python sejauh ini cukup mengandalkan standard library yang sudah dibawa interpreter Python. Begitu kita membangun proyek nyata, kebutuhan kode pihak ketiga hampir pasti muncul: framework web seperti Django, HTTP client seperti requests, atau pustaka numerik seperti numpy. Sebelum bicara cara memasang dan mengelolanya, kita perlu memahami fondasinya: apa sebenarnya yang dimaksud package, dari mana pip mengambilnya, dan ke mana hasil instalasinya pergi.

Package, Module, dan Distribution #

Tiga istilah ini sering dipakai bergantian, padahal maknanya berbeda. Chapter Package dan Subpackage telah membahas package dari sisi penulisan kode; di dunia distribusi, ada satu lapisan lagi bernama distribution — unit yang dipasang lewat pip.

IstilahWujud fisikContoh
Modulesatu file .pyrandom (random.py)
Packagedirektori berisi __init__.pyemail
Distributionarsip terpasang lewat pip, berisi satu atau beberapa packagerequests

Distribution dipublikasikan dalam dua format arsip: sdist (source distribution, berkas .tar.gz) dan wheel (berkas .whl yang tinggal diekstrak ke tempatnya). Bagi pip, keduanya sama-sama bahan instalasi; kita akan membedahnya lebih dalam pada Chapter Membangun Python Package.

Distribution Name dan Import Name #

Nama yang kita tulis setelah pip install tidak selalu sama dengan nama yang kita tulis setelah import. Distribution name mengikuti gaya kebab-case, sedangkan import name mengikuti aturan identifier Python.

Perintah instalasiStatement import
pip install beautifulsoup4import bs4
pip install scikit-learnimport sklearn
pip install Pillowimport PIL
pip install PyYAMLimport yaml

Ketidakcocokan ini terjadi karena distribution name harus unik di indeks paket, sedangkan import name bebas dipilih oleh penulis package. Satu-satunya cara memastikan adalah membaca dokumentasi package bersangkutan.

PyPI dan site-packages #

pip tidak menginstal package dari udara kosong. pip mencari distribution ke PyPI (Python Package Index) di pypi.org — repositori publik yang menampung jutaan distribution dari komunitas. Setelah terpasang, kode package berada di folder site-packages milik environment Python yang aktif.

Bagaimana membedakan mana kode bawaan Python dan mana hasil instalasi pip? Sejak Python 3.10, interpreter menyediakan kumpulan nama module standard library melalui sys.stdlib_module_names:

python
import sys

print("json" in sys.stdlib_module_names)
print("requests" in sys.stdlib_module_names)

Output yang Dihasilkan:

text
True
False

Mari kita telaah kode di atas:

  1. Baris 3 (print("json" ...)): nama json terdaftar sebagai module standard library, jadi interpreter Python selalu menyediakannya tanpa instalasi apa pun.
  2. Baris 4 (print("requests" ...)): nama requests tidak terdaftar. Module requests hanya tersedia jika kita memasang distribution requests ke site-packages terlebih dahulu.

Pohon Dependency #

Package besar jarang berdiri sendiri. Distribution requests versi 2.32.5, misalnya, mendeklarasikan empat dependency: certifi, charset-normalizer, idna, dan urllib3. Dependency yang kita tulis sendiri disebut direct dependency; dependency yang dibutuhkan direct dependency disebut transitive dependency.

Ketika kita menjalankan pip install requests, pip menelusuri pohon ini sampai ke daun, lalu memasang semuanya secara otomatis. Pemahaman tentang pohon dependency inilah yang menjadi fondasi seluruh bab berikutnya: mengapa versi bisa bertabrakan, mengapa environment perlu diisolasi, dan mengapa daftar dependency perlu dikunci.