Interpreter Python yang benar baru setengah fondasi; setengah lainnya adalah pengelolaan pustaka per proyek. Bayangkan Anda mengerjakan dua proyek sekaligus: proyek lama yang terikat NumPy versi 1.x dan proyek baru yang membutuhkan NumPy 2.x. Tanpa isolasi, keduanya berbagi satu tumpukan pustaka global, dan setiap pip install di satu proyek dapat mengubah perilaku proyek lainnya. Chapter ini memperkenalkan virtual environment (venv) sebagai solusi baku: satu lingkungan terpisah untuk setiap proyek, lengkap dengan cara membuat, mengaktifkan, dan mendokumentasikannya lewat requirements.txt.

Masalah yang Dipecahkan Virtual Environment #

Skenario berikut sering terjadi pada pengembang yang baru pindah ke Python. Sebuah proyek klasifikasi berjalan baik selama berbulan-bulan. Suatu hari Anda memulai proyek forecasting dan memasang pustaka barunya; pip menaikkan atau menurunkan beberapa pustaka bersama. Esoknya, proyek klasifikasi yang lama mulai memunculkan galat aneh: fungsi yang tadinya ada berpindah modul, dan hasil pelatihan berubah karena versi pustaka numerik berganti. Penelusuran penyebabnya memakan waktu berjam-jam padahal kodenya tidak diubah sama sekali.

Akar masalahnya: secara bawaan, seluruh paket yang dipasang pip mendarat di satu folder site-packages yang dipakai bersama semua proyek. Virtual environment memutus ketergantungan bersama ini dengan memberi tiap proyek struktur sebagai berikut:

  • Interpreter sendiri — tautan atau salinan binary Python yang menunjuk ke folder proyek.
  • site-packages sendiri — pustaka terpasang di dalam folder .venv milik proyek, tidak terlihat oleh proyek lain.
  • Berkas pyvenv.cfg — penanda bahwa folder tersebut adalah lingkungan virtual (bagian dari spesifikasi PEP 405).

Ketika lingkungan aktif, perintah python dan pip otomatis merujuk ke salinan di dalam .venv, sehingga instalasi maupun peningkatan versi hanya berdampak pada proyek tersebut. Karena semua artefak berada dalam satu folder, lingkungan juga mudah dibuang dan dibuat ulang jika kondisinya perlu dikembalikan ke awal.

Membuat dan Mengaktifkan venv #

Semua yang kita butuhkan sudah tersedia di pustaka bawaan Python — tidak ada alat tambahan untuk skenario dasar. Buat lingkungan bernama .venv (nama konvensi yang dikenali banyak alat) di akar folder proyek:

bash
# buat environment baru bernama .venv
python3 -m venv .venv

Perintah ini membuat folder .venv berisi interpreter, pip, dan site-packages kosong. Langkah berikutnya mengaktifkannya sehingga terminal memakai interpreter proyek:

Windows #

bash
# buat environment (launcher py memilih Python 3 terbaru)
py -m venv .venv

# aktifkan di PowerShell
.venv\Scripts\Activate.ps1

# aktifkan di Command Prompt
.venv\Scripts\activate.bat

Bila PowerShell menolak skrip aktivasi, izinkan skrip lokal untuk pengguna saat ini dengan Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser, lalu ulangi aktivasi.

macOS dan Linux #

bash
# buat environment
python3 -m venv .venv

# aktifkan
source .venv/bin/activate

Saat lingkungan aktif, prompt shell ditampilkan dengan awalan (.venv) sebagai penanda visual. Untuk keluar dari lingkungan dan kembali ke interpreter sistem, cukup jalankan:

bash
deactivate

requirements.txt dan pip freeze #

Lingkungan yang terisolasi menyelesaikan konflik, tetapi rekan tim Anda — atau server produksi — tetap perlu tahu pustaka apa saja yang harus dipasang. Berkas requirements.txt adalah jawaban baku: daftar pustaka satu baris per entri, idealnya dengan versi terkunci memakai operator ==. Snapshot lingkungan aktif dapat dibuat dengan pip freeze:

bash
# simpan daftar pustaka lingkungan aktif ke requirements.txt
python3 -m pip freeze > requirements.txt

# pasang ulang pustaka yang sama di lingkungan lain / mesin lain
python3 -m pip install -r requirements.txt

Contoh isi requirements.txt untuk proyek pada Course ini:

text
numpy==2.1.3
pandas==2.2.3
scipy==1.14.1
matplotlib==3.9.2
scikit-learn==1.5.2

Menyimpan nomor versi seperti di atas membuat instalasi dapat direproduksi: komputer lain akan memperoleh kombinasi pustaka yang persis sama, bukan versi apa pun yang kebetulan termutakhir saat itu. Kebiasaan ini akan kita manfaatkan lagi pada Chapter Menginstal scikit-learn dan Ekosistemnya.

uv sebagai Alternatif Modern #

Sejak 2024, alat bernama uv dari Astral populer sebagai pengganti pip + venv karena kecepatannya. uv menulis resolver dan pengunduhnya dalam bahasa Rust, memakai cache global antarproyek, dan mengunduh paket secara paralel:

bash
# pasang uv sekali (salah satu cara)
python3 -m pip install uv

# buat environment .venv dengan uv
uv venv

# pasang pustaka ke environment aktif
uv pip install scikit-learn numpy pandas matplotlib scipy

# pasang dari berkas requirements.txt
uv pip install -r requirements.txt

Memeriksa Interpreter Aktif secara Programatik #

Kadang kita perlu memastikan skrip benar-benar berjalan di dalam venv — misalnya pada skrip otomatisasi atau sesi debugging jarak jauh. Modul sys menyediakan pemeriksaan baku berdasarkan PEP 405:

python
# Deteksi apakah interpreter Python aktif berjalan di dalam virtual environment.
# Teknik yang dipakai: membandingkan sys.prefix dengan sys.base_prefix,
# mekanisme resmi virtual environment sesuai PEP 405.

import sys

di_dalam_venv = sys.prefix != sys.base_prefix

print(f"Implementasi          : {sys.implementation.name}")
print(f"Di dalam venv         : {di_dalam_venv}")

if di_dalam_venv:
    print("Interpreter aktif berasal dari sebuah virtual environment.")
else:
    print("Interpreter aktif adalah interpreter sistem, bukan virtual environment.")

Output yang Dihasilkan:

text
Implementasi          : cpython
Di dalam venv         : True
Interpreter aktif berasal dari sebuah virtual environment.

Bedah singkat skrip di atas:

  1. Baris 5 (import sys): sama seperti Chapter sebelumnya, sys adalah jendela ke identitas interpreter.
  2. Baris 7 (sys.prefix != sys.base_prefix): sys.prefix adalah lokasi lingkungan tempat interpreter berjalan, sedangkan sys.base_prefix selalu menunjuk ke instalasi Python dasar. Di dalam venv keduanya berbeda; di interpreter sistem keduanya sama. Perbandingan inilah detektor yang dipakai banyak alat, termasuk aktivasi shell pip.
  3. Baris 9–10: hasil pemeriksaan dicetak dengan label — perhatikan bahwa skrip sengaja tidak mencetak lokasi prefix itu sendiri, karena path berbeda-beda antar mesin dan tidak menambah informasi di sini.
  4. Baris 12–15: pesan penjelasan menyesuaikan hasil deteksi, sehingga keluaran tetap informatif di kedua kemungkinan.

Lingkungan yang aktif dan terisolasi kini siap diisi. Chapter berikutnya mengisi raknya: kita akan memasang scikit-learn beserta NumPy, pandas, matplotlib, dan SciPy — lalu memahami bagaimana pip menyelesaikan dependensi di balik layar. Lanjut ke Chapter Menginstal scikit-learn dan Ekosistemnya.

Referensi Resmi #