Bayangkan dua proyek berjalan di satu komputer: proyek lama butuh Django 4.2, proyek baru membutuhkan Django 5.1. Jika keduanya memasang package ke Python global, hanya satu yang bisa menang — site-packages hanya punya satu slot untuk django. Virtual environment (venv) menyelesaikan masalah ini dengan memberi setiap proyek folder site-packages sendiri. Pada chapter ini kita membuat venv pertama kita dan membedah isi folder tersebut.
Masalah Tanpa Isolasi #
Memasang seluruh dependency ke Python global terasa mudah di awal, tetapi cepat menimbulkan masalah:
- Konflik versi: dua proyek membutuhkan versi berbeda dari distribution yang sama; salah satunya pasti rusak.
- Pencemaran: site-packages global menumpuk puluhan package dari proyek yang bahkan sudah terhapus, dan tidak ada cara membedakan mana yang masih terpakai.
- Tidak reproducible: tidak ada daftar resmi package yang dibutuhkan proyek; memindahkan proyek ke komputer lain menjadi tebak-tebakan.
- Izin sistem: memasang package ke area sistem di Linux/macOS memancing praktik berbahaya
sudo pip install.
Membuat venv Pertama #
Python membawa solusinya di standard library: module venv. Masuk ke folder proyek, lalu jalankan satu perintah:
cd proyek-toko
python3 -m venv .venvPerintah ini tidak mencetak apa pun. Diamnya perintah berarti sukses — folder .venv kini berada di akar proyek. Mari kita bedah perintahnya:
python3 -m venv: flag-mmenjalankan modulevenvbawaan interpreter Python — tidak ada yang perlu dipasang terlebih dahulu..venv: argumen posisi menentukan lokasi folder environment. Nama.venvadalah konvensi komunitas; titik di depan membuat folder tersembunyi di Linux/macOS.
Venv bukan salinan penuh instalasi Python. Module venv hanya membuat struktur ramping yang menunjuk kembali ke interpreter asli:
.venv/
├── bin/
│ ├── activate
│ ├── activate.csh
│ ├── activate.fish
│ ├── Activate.ps1
│ ├── pip
│ ├── pip3
│ ├── python -> python3.12
│ ├── python3 -> python3.12
│ └── python3.12
├── include/
├── lib/
│ └── python3.12/
│ └── site-packages/
│ ├── pip/
│ └── pip-25.0.1.dist-info/
├── lib64 -> lib
└── pyvenv.cfgStruktur di atas diambil dari venv asli yang dibuat dengan Python 3.12 di Linux. Di Windows, nama foldernya sedikit berbeda: bin menjadi Scripts (berisi python.exe dan pip.exe), lib menjadi Lib, dan symlink lib64 tidak ada.
Peran Setiap Komponen #
bin dan site-packages #
Rantai python -> python3.12 di folder bin adalah symlink menuju interpreter basis yang membuat venv tadi. Inilah alasan membuat venv cepat dan hemat ruang: interpreter tidak disalin, hanya dirujuk. Folder lib/python3.12/site-packages adalah tujuan semua pip install saat venv aktif — di sinilah package pip bawaan itu berada.
pyvenv.cfg #
Berkas kecil pyvenv.cfg adalah identitas venv. Tiga baris utamanya tampak seperti ini (jalur home akan berbeda di komputer Anda; beberapa instalasi juga menambahkan baris lain seperti executable dan command):
home = /usr/local/bin
include-system-site-packages = false
version = 3.12.15home: lokasi interpreter Python yang menjadi dasar venv.include-system-site-packages = false: kunci utama isolasi — site-packages global tidak terlihat dari dalam venv, sehingga package global tidak bisa diimpor dan tidak bisa bertabrakan.version: versi Python basis yang dipakai, dalam hal ini 3.12.15.
Aturan Satu venv per Proyek #
Venv murah, jadi tidak ada alasan berbagi. Tiga aturan praktis berikut menjaga proyek tetap sehat:
- Satu proyek, satu venv, dibuat di akar proyek dengan nama
.venvagar tool seperti VS Code mengenalinya secara otomatis. - Jangan pernah commit
.venvke version control. Tambahkan.venv/ke.gitignore; environment mudah dibuat ulang dari daftar dependency, bukan disimpan mentah-mentah. - Jangan memindahkan folder venv. Isi
pyvenv.cfgdan symlink di dalamnya menyimpan jalur absolut; memindah atau mengganti nama folder proyek membuat venv rusak. Buat ulang venv baru bila perlu.