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.
| Istilah | Wujud fisik | Contoh |
|---|---|---|
| Module | satu file .py | random (random.py) |
| Package | direktori berisi __init__.py | email |
| Distribution | arsip terpasang lewat pip, berisi satu atau beberapa package | requests |
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 instalasi | Statement import |
|---|---|
pip install beautifulsoup4 | import bs4 |
pip install scikit-learn | import sklearn |
pip install Pillow | import PIL |
pip install PyYAML | import 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:
import sys
print("json" in sys.stdlib_module_names)
print("requests" in sys.stdlib_module_names)Output yang Dihasilkan:
True
FalseMari kita telaah kode di atas:
- Baris 3 (
print("json" ...)): namajsonterdaftar sebagai module standard library, jadi interpreter Python selalu menyediakannya tanpa instalasi apa pun. - Baris 4 (
print("requests" ...)): namarequeststidak terdaftar. Modulerequestshanya tersedia jika kita memasang distributionrequestske 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.