Bayangkan proyek pipeline lama masih bergantung pada pandas versi 1.x, sementara proyek baru membutuhkan pandas 2.x. Bila seluruh pustaka dipasang ke satu interpreter global, pembaruan untuk proyek baru menimpa pustaka proyek lama dan pipeline lama berhenti berjalan. Virtual environment (venv) menyelesaikan masalah tersebut dengan memberi setiap proyek folder pustakanya sendiri. Untuk data engineer, isolasi semacam ini bukan gaya-gayaan: pipeline yang berjalan di laptop wajib berjalan juga di server CI dengan kombinasi versi yang sama persis.

Apa itu Virtual Environment #

Virtual environment adalah folder berisi salinan ringan interpreter Python ditambah folder site-packages tersendiri untuk menampung pustaka. Salinan tersebut bukan duplikat penuh — venv hanya menautkan kembali ke interpreter induk, lalu mengarahkan pemasangan pustaka ke folder venv. Begitu venv diaktifkan, perintah python3 dan pip di terminal merujuk ke folder venv tersebut, bukan ke interpreter sistem.

Membuat Virtual Environment #

Modul venv sudah tersedia di dalam Python standar, jadi kita tidak perlu memasang apa pun. Bukalah terminal di folder proyek, lalu jalankan:

bash
python3 -m venv venv-demo
ls venv-demo

Output yang Dihasilkan:

text
bin
include
lib
lib64
pyvenv.cfg

Mari kita telaah isi folder tersebut:

  1. Folder bin: menampung executable python, python3, pip, dan skrip activate untuk sistem Linux/macOS. Di Windows, folder tersebut bernama Scripts.
  2. Folder lib: menampung site-packages, tempat seluruh pustaka proyek dipasang.
  3. Berkas pyvenv.cfg: menyimpan pengaturan venv, termasuk lokasi interpreter induk yang dipakai sebagai dasar.

Mengaktifkan dan Menonaktifkan #

Aktivasi menempatkan folder bin milik venv di posisi paling depan PATH, sehingga shell menemukan interpreter venv lebih dulu daripada interpreter sistem. Perintahnya berbeda antara sistem operasi:

SistemPerintah aktivasi
Linux / macOS (bash, zsh)source venv-demo/bin/activate
Windows PowerShellvenv-demo\Scripts\Activate.ps1
Windows CMDvenv-demo\Scripts\activate.bat

Mari kita amati perubahan yang terjadi di sistem Linux setelah aktivasi:

bash
source venv-demo/bin/activate
which python3
which pip
deactivate
which python3

Output yang Dihasilkan:

text
/home/z/my-project/scratch/W1-c/venv-demo/bin/python3
/home/z/my-project/scratch/W1-c/venv-demo/bin/pip
/home/z/.venv/bin/python3

Dua baris pertama dicetak saat venv masih aktif: python3 dan pip sama-sama merujuk folder venv-demo/bin. Setelah perintah deactivate, which python3 kembali menunjuk interpreter luar — pada contoh di atas, interpreter virtual environment lain milik mesin penulisan; di komputer Anda kemungkinan besar /usr/bin/python3. Prompt shell juga menampilkan awalan (venv-demo) selama venv aktif, sebagai penanda visual.

Isi venv yang Masih Segar #

Venv baru belum memuat pustaka proyek apa pun. Kita bisa membuktikannya dengan menjalankan pip list dari dalam venv:

bash
venv-demo/bin/pip list

Output yang Dihasilkan:

text
Package Version
------- -------
pip     25.0.1

Satu-satunya paket yang hadir adalah pip sendiri. Inilah kekuatan isolasi: pustaka pandas, duckdb, atau pyspark yang terpasang di interpreter lain tidak ikut terlihat, sehingga daftar dependensi proyek selalu bersih dan terkendali sejak awal.

Mengapa venv Penting untuk Data Engineering #

  • Reproduksibilitas: pipeline yang dijalankan ulang setahun kemudian tetap memakai versi pustaka yang sama, bukan versi terbaru yang perilakunya sudah berubah.
  • Keamanan sistem: pemasangan pustaka tidak menyentuh interpreter sistem operasi, sehingga tidak diperlukan akses administrator.
  • Paralelisme proyek: setiap proyek dapat memakai kombinasi versi berbeda tanpa saling menimpa.
  • Kesiapan CI/CD: server integrasi berkelanjutan tinggal membuat venv baru dan memasang daftar dependensi yang sama.

Venv hanya menyediakan wadah kosong. Langkah berikutnya adalah mencatat pustaka apa saja yang dipasang ke dalamnya — pekerjaan yang dibahas tuntas pada chapter Manajemen Dependensi. Rujukan lengkap modul venv tersedia di https://docs.python.org/3/library/venv.html .