Proyek deep learning jarang berhenti pada satu paket: NumPy, PyTorch, TensorFlow, matplotlib, dan belasan paket pendukung lainnya saling bergantung dalam satu lingkungan. Tanpa pencatatan yang disiplin, lingkungan yang berfungsi hari ini tidak dapat dibangun ulang besok — di komputer rekan kerja, di server pelatihan, maupun di sistem CI. Disiplin ini bernama manajemen dependensi: mencatat paket apa saja dan versi mana saja yang dipakai proyek, lalu memastikan daftar tersebut cukup untuk membangun ulang lingkungan yang identik. Chapter ini mempraktikkan dua format utama — requirements.txt dan pyproject.toml — lalu mengenalkan uv sebagai alat modern yang mempercepat seluruh siklusnya.
Membekukan Versi ke requirements.txt #
Format paling tua sekaligus paling luas dipakai adalah requirements.txt: daftar paket dengan versi persis hasil pembekuan lingkungan. Kita buktikan siklusnya lengkap di mesin uji, mulai dari proyek kecil dengan dua paket:
mkdir /tmp/manajemen-demo && cd /tmp/manajemen-demo
python3 -m venv .venv
source .venv/bin/activate
pip install numpy requestsOutput yang Dihasilkan:
Successfully installed certifi-2026.7.22 charset-normalizer-3.5.2 idna-3.20 numpy-2.5.4 requests-2.34.2 urllib3-2.8.0Perhatikan bahwa memasang dua paket menghasilkan enam paket terpasang — certifi, charset-normalizer, idna, dan urllib3 adalah dependensi transitif milik requests. Pembekuan dengan pip freeze menangkap seluruh pohon tersebut:
pip freeze > requirements.txt
cat requirements.txtOutput yang Dihasilkan:
certifi==2026.7.22
charset-normalizer==3.5.2
idna==3.20
numpy==2.5.4
requests==2.34.2
urllib3==2.8.0Berkas inilah yang dibagikan ke rekan kerja atau diserahkan ke server CI. Uji reproduksi terakhir: venv baru dibuat dari nol, lalu seluruh daftar dipasang kembali:
python3 -m venv /tmp/manajemen-verifikasi
/tmp/manajemen-verifikasi/bin/pip install -r /tmp/manajemen-demo/requirements.txtOutput yang Dihasilkan:
Successfully installed certifi-2026.7.22 charset-normalizer-3.5.2 idna-3.20 numpy-2.5.4 requests-2.34.2 urllib3-2.8.0Enam paket yang sama terpasang kembali dengan versi yang sama persis. Memanggil numpy.__version__ di venv baru mengembalikan 2.5.4 — identik dengan lingkungan asal, sehingga hasil pelatihan model dapat direproduksi orang lain.
Mendeklarasikan Proyek di pyproject.toml #
requirements.txt merekam keadaan, sedangkan pyproject.toml mendeklarasikan niat. Format ini adalah standar resmi modern untuk metadata proyek Python: kita menuliskan dependensi langsung beserta rentang versinya, lalu membiarkan resolver menghitung sisa pohon dependensi:
[project]
name = "proyek-klasifikasi"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"numpy>=2.1,<3",
"torch==2.14.*",
"tensorflow==2.21.*",
]Penulisan "numpy>=2.1,<3" berarti NumPy 2.1 sampai sebelum 3.0 boleh dipakai, sementara "torch==2.14.*" mengunci rilis besar PyTorch tanpa menyetel angka patch. Perbedaan kedua format ini dirangkum pada tabel berikut:
| Aspek | requirements.txt | pyproject.toml |
|---|---|---|
| Isi | seluruh paket terpasang, versi persis | dependensi langsung, rentang versi |
| Kegunaan utama | mereproduksi lingkungan | mendeklarasikan proyek dan membangun paket |
| Paket transitif | ikut tercatat | dihitung ulang oleh resolver saat pemasangan |
| Alat pembacanya | pip install -r | pip install ., uv, build tools |
Spesifikasi lengkap kedua format didokumentasikan di packaging.python.org
. Pola yang umum di proyek serius: mendeklarasikan niat di pyproject.toml, lalu menghasilkan berkas requirements.txt terkunci dari deklarasi tersebut untuk keperluan reproduksi.
uv sebagai Alternatif Modern #
uv adalah manajer paket dan proyek yang ditulis dalam Rust dari Astral; dokumentasinya ada di docs.astral.sh/uv
. Keunggulan utamanya adalah kecepatan: cache agresif dan pemasangan paralel membuat siklus venv-pasang-bekukan terasa hampir seketika. Pemasangan uv mengikuti panduan resminya — pada mesin uji Course, uv 0.13.1 dipasang ke venv sementara lewat pip install uv dan seluruh perintah berikut dijalankan nyata:
uv --versionOutput yang Dihasilkan:
uv 0.13.1 (x86_64-unknown-linux-gnu)Membuat venv dengan uv tidak lagi memerlukan python3 -m venv:
uv venv uv-demoOutput yang Dihasilkan:
Using CPython 3.12.15
Creating virtual environment at: uv-demo
Activate with: source uv-demo/bin/activatePemasangan paket memakai subperintah uv pip install yang antarmukanya meniru pip:
uv pip install numpyOutput yang Dihasilkan (dua baris progres berisi durasi telah disingkat karena nilainya berubah setiap eksekusi):
+ numpy==2.5.4Pembekuan daftar paket memakai uv pip freeze dan hasilnya berformat sama dengan pip:
uv pip freezeOutput yang Dihasilkan:
numpy==2.5.4Resolusi Versi dan Konflik #
pip dan uv sama-sama menjalankan resolver: mesin pencari kombinasi versi yang memenuhi seluruh syarat dependensi sekaligus. Konflik terjadi ketika dua paket mensyaratkan rentang versi berbeda untuk paket bersama — misalnya satu paket meminta numpy>=2.5 sementara paket lain terkunci pada numpy<2.3. Resolver akan mencoba berbagai kombinasi mundur, dan bila tidak ada yang memenuhi, pemasangan berakhir dengan galat ResolutionImpossible beserta daftar syarat yang bertentangan.
Untuk memeriksa versi yang sedang terpasang di lingkungan aktif, standard library sudah menyediakan jalur yang rapi tanpa shell tambahan:
from importlib.metadata import version
for nama_paket in ("numpy", "torch", "tensorflow"):
print(f"{nama_paket:<12}: {version(nama_paket)}")Output yang Dihasilkan:
numpy : 2.1.3
torch : 2.14.1+cpu
tensorflow : 2.21.0Mari kita telaah kode di atas baris per baris:
- Baris 1 (
from importlib.metadata import version): mengimpor fungsi pembaca versi dari metadata paket yang terpasang disite-packages— bagian dari standard library sejak Python 3.8. - Baris 3 (
for nama_paket in (...)): mengiterasi tiga paket utama Course; cukup tambahkan nama paket lain ke tuple untuk memeriksanya. - Baris 4 (
f"{nama_paket:<12}"): format string dengan lebar 12 karakter rata kiri sehingga kolom versi rapi sejajar. - Fungsi
version(nama_paket): membaca berkas metadata.dist-infomilik paket, bukan memuat paketnya — jadi pemeriksaan ini cepat dan tidak menjalankan kode impor framework yang berat.
Ringkasan #
Pada Chapter ini kita membekukan lingkungan menjadi requirements.txt dan membuktikan bahwa venv baru dapat membangun ulang keenam paket dengan versi identik, mendeklarasikan dependensi langsung di pyproject.toml, menguji uv sebagai alternatif cepat, lalu memahami cara resolver menangani konflik versi. Dengan Python, venv, Jupyter, kedua framework, pemeriksaan perangkat, dan disiplin dependensi di tangan, perangkat persiapan kita lengkap. Section berikutnya menyegarkan fondasi Python yang paling relevan bagi deep learning sebelum kita membangun neural network pertama dari nol.