Episode ini membahas cara menjaga dependency tetap terkendali: perbandingan requirements.txt dan pyproject.toml, alat seperti Poetry dan Flit, lockfiles dengan pip-tools, pipx untuk CLI tools, dan best practice virtualenv untuk environment reproducible.

Di episode 7 kita mulai mencatat dependency. Episode 8 membawa pengelolaan itu ke level produksi: bagaimana memastikan project kalian berjalan identik di mesin mana pun, kapan memakai requirements.txt versus pyproject.toml, dan bagaimana mengunci versi dependency dengan lockfile.
Kita juga membahas alat modern seperti Poetry, Flit, dan pipx. Tujuannya satu: reproducible environments — fondasi penting sebelum kalian masuk ke deployment di episode 20.
requirements.txt adalah daftar dependency sederhana yang sudah lama dipakai:
requests==2.32.3
fastapi>=0.110
uvicorn[standard]>=0.29requirements.txt mudah dipahami dan sering dipakai untuk aplikasi yang bukan library. Format package==versi mengunci versi persis, sedangkan package>=versi memberi rentang. Instalasi dengan pip install -r requirements.txt.
pyproject.toml lebih terstruktur dan menjadi standar untuk library modern:
[project]
name = "belajar-web"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"fastapi>=0.110",
"uvicorn[standard]>=0.29"
]
[project.optional-dependencies]
dev = ["pytest>=8.0", "ruff", "mypy"][project.optional-dependencies] memisahkan dependency pengembangan dari dependency runtime. Install dependency utama dengan pip install -e ., dan dependency dev dengan pip install -e ".[dev]". Ini lebih ekspresif daripada requirements.txt.
Poetry menggabungkan dependency management, virtual environment, dan packaging dalam satu alat:
pip install poetry
poetry new belajar_poetry
cd belajar_poetry
poetry add fastapipoetry new belajar_poetry membuat project baru, dan poetry add fastapi menambah dependency sekaligus lockfile. Poetry membuat poetry.lock yang mengunci versi persis semua dependency — kunci reproducible environment.
Flit fokus pada kemudahan packaging library:
pip install flit
flit init
flit publishflit init membuat pyproject.toml interaktif, dan flit publish membangun serta mengunggah package ke PyPI. Flit cocok untuk library sederhana yang butuh build cepat. Untuk aplikasi kompleks, Poetry atau pip-tools lebih fleksibel.
Lockfile mencatat versi persis semua dependency beserta turunannya, sehingga environment bisa direproduksi persis. pip-tools menyediakan dua alat: pip-compile untuk membuat lockfile dan pip-sync untuk memasangnya:
pip install pip-tools
pip-compile --output-file=requirements.lock pyproject.tomlpip-compile membaca dependency dari pyproject.toml dan menghasilkan requirements.lock berisi versi persis yang sudah di-resolve. Lockfile ini yang di-commit ke Git agar semua anggota tim memakai versi sama.
Setelah lockfile ada, pasang persis versinya dengan pip-sync:
pip-sync requirements.lockpip-sync requirements.lock menyamakan environment kalian persis dengan isi lockfile — menghapus package yang tidak ada di daftar dan memasang versi yang ditentukan. Ini menjamin konsistensi antara development, staging, dan production.
pipx menginstall tool CLI Python ke environment terisolasi agar tidak mencemari venv project:
pip install pipx
pipx install black
pipx install poetry
pipx install ruffpipx install black memasang black ke environment khusus dan membuat perintahnya tersedia global. Berbeda dari pip install biasa, pipx mengisolasi tiap tool sehingga konflik dependency antar tool tidak terjadi.
pipx mendukung operasi penuh untuk mengelola tool:
pipx upgrade black
pipx list
pipx uninstall blackpipx list menampilkan semua tool yang terinstall, pipx upgrade black memperbarui tool tertentu, dan pipx uninstall black menghapusnya. Aturan praktis: tool CLI global dipasang dengan pipx, sedangkan library project dipasang di venv project.
Beberapa praktik yang menjaga environment tetap reproducible:
Workflow yang direkomendasikan per project:
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -e ".[dev]"
pip-compile --output-file=requirements.lock
pip-sync requirements.lockUrutan ini membangun venv, memasang dependency dev, lalu mengunci dan menyinkronkan versi. Jalankan pip-compile setiap kali ada dependency baru, dan commit lockfile-nya. Ini menjamin setiap anggota tim dan CI memakai environment yang identik.
Inti yang harus dibawa pulang:
Di episode 9 selanjutnya kita akan membahas persistensi dan database — SQLAlchemy Core dan ORM, migrasi dengan Alembic, gambaran driver Redis dan MongoDB, serta pola connection pooling dan transaction. Project kalian mulai terhubung dengan data sungguhan!