Setiap proyek deep learning memiliki kebutuhan versi paket yang berbeda: satu proyek dapat membutuhkan NumPy 2.1 bersama PyTorch 2.14, sementara proyek lain terikat pada kombinasi versi yang lebih lama. Apabila semua paket dipasang ke satu Python yang sama, pip dipaksa menyesuaikan versi paket bersama setiap kali ada proyek baru dijalankan. Virtual environment (venv) menyelesaikan masalah tersebut dengan memberi setiap proyek folder paket dan salinan interpreter miliknya sendiri. Chapter ini membawa kita praktik dari awal: membuat venv, mengaktifkannya, memasang paket, memverifikasi bahwa isolasi benar-benar bekerja, lalu membekukan daftar paket agar mudah dibagikan.
Masalah Berbagi Paket Antar Proyek #
Secara bawaan, pip memasang paket ke satu lokasi site-packages milik interpreter yang dipakai. Seluruh skrip yang berjalan dengan interpreter tersebut melihat versi paket yang sama. Konsekuensinya, memperbarui paket untuk satu proyek secara diam-diam mengubah perilaku proyek lain di komputer yang sama. Perbandingan berikut merangkum perbedaan bekerja dengan dan tanpa venv:
| Aspek | Tanpa venv | Dengan venv |
|---|---|---|
| Lokasi paket | site-packages milik interpreter utama | site-packages di dalam folder venv |
Dampak pip install | berlaku untuk semua proyek pemakai interpreter tersebut | hanya proyek pemilik venv |
| Menghapus paket terpasang | membongkar satu per satu | cukup menghapus folder venv |
| Berbagi konfigurasi ke rekan | menuliskan daftar paket secara manual | requirements.txt hasil pip freeze |
venv bukan mesin virtual atau container. venv hanyalah struktur folder berisi tautan ke interpreter Python, salinan pip, dan folder site-packages yang terpisah, sehingga pembuatannya cepat dan ukurannya kecil.
Alur Kerja Proyek yang Terisolasi #
Sebelum masuk ke perintah konkret, mari kita lihat posisi venv di dalam siklus hidup proyek. Diagram berikut menunjukkan alur lengkap dari pembuatan proyek sampai berpindah ke proyek lain:
Inti pola pada diagram di atas: venv dibuat sekali per proyek, diaktifkan setiap kali kita mulai bekerja, lalu dinonaktifkan saat berpindah. Folder venv tidak perlu dibagikan karena isinya dapat dibangun ulang dari daftar paket.
Membuat Virtual Environment #
Pastikan paket python3-venv sudah terpasang pada Debian/Ubuntu (lihat Chapter Instalasi Python). Untuk demo ini kita membuat venv sekali pakai di /tmp dengan nama demo-venv; pada proyek nyata, ganti lokasinya ke dalam folder proyek dengan nama .venv:
python3 -m venv /tmp/demo-venvPerintah tersebut tidak mencetak apa pun saat berhasil. Kita bisa memastikan hasilnya dengan melihat isi foldernya:
ls /tmp/demo-venvOutput yang Dihasilkan:
bin
include
lib
lib64
pyvenv.cfgTiga item terpenting dari struktur tersebut:
bin— berisipython3,pip, dan skrip aktivasi; inilah interpreter yang akan dipakai proyek.lib— berisisite-packages, lokasi seluruh paket yang dipasang ke venv.pyvenv.cfg— berkas konfigurasi kecil yang mencatat versi Python dan lokasi interpreter dasar.
Mengaktifkan Virtual Environment #
Aktivasi mengubah lingkungan shell agar perintah python3 dan pip menunjuk ke salinan di dalam venv. Perintahnya berbeda antar sistem operasi:
| Sistem operasi | Perintah aktivasi |
|---|---|
| Linux / macOS (bash, zsh) | source .venv/bin/activate |
| Windows (PowerShell) | .venv\Scripts\Activate.ps1 |
| Windows (cmd) | .venv\Scripts\activate.bat |
Kita jalankan aktivasi untuk venv demo di Linux, lalu memeriksa variabel VIRTUAL_ENV yang diatur oleh skrip aktivasi:
source /tmp/demo-venv/bin/activate
echo $VIRTUAL_ENVOutput yang Dihasilkan:
/tmp/demo-venvSetelah aktivasi, prompt shell akan ditambahi nama venv, misalnya (demo-venv) $. Untuk keluar dari venv, jalankan perintah deactivate — shell kembali memakai Python semula.
Memasang Paket ke Dalam Virtual Environment #
Dengan venv aktif, pip install kini menulis ke site-packages milik venv, bukan milik interpreter utama. Kita uji dengan memasang NumPy:
pip install numpypip mencetak progres pengunduhan selama proses berlangsung; baris akhir yang menandakan keberhasilan tampak seperti berikut:
Successfully installed numpy-2.5.4Sekarang kita pastikan NumPy terpasang dengan benar di dalam venv:
python3 -c "import numpy as np; print('numpy', np.__version__)"Output yang Dihasilkan:
numpy 2.5.4Interpreter yang menjalankan import numpy adalah /tmp/demo-venv/bin/python3, sehingga versi yang tampil berasal dari paket yang baru saja dipasang ke venv demo.
Memastikan Isolasi dengan sys.prefix #
Cara paling meyakinkan untuk membuktikan kita berada di dalam venv adalah membandingkan dua atribut interpreter. Skrip berikut kita simpan sebagai berkas agar dapat dipakai ulang di proyek apa pun:
import sys
print("sys.prefix :", sys.prefix)
print("sys.base_prefix :", sys.base_prefix)
if sys.prefix != sys.base_prefix:
print("Status : di dalam virtual environment")
else:
print("Status : di interpreter utama")Output yang Dihasilkan (dijalankan dengan venv /tmp/demo-venv aktif):
sys.prefix : /tmp/demo-venv
sys.base_prefix : /home/z/.local/share/uv/python/cpython-3.12.15-linux-x86_64-gnu
Status : di dalam virtual environmentMari kita telaah kode di atas baris per baris:
- Baris 1 (
import sys): mengimpor modulsysyang menyimpan identitas interpreter yang sedang berjalan. - Baris 3 (
sys.prefix): lokasisite-packagesaktif. Di dalam venv, nilainya menunjuk ke folder venv (/tmp/demo-venv). - Baris 4 (
sys.base_prefix): lokasi interpreter dasar yang menjadi asal venv. Di luar venv,sys.prefixdansys.base_prefixbernilai sama. - Baris 6-9 (
if sys.prefix != ...): membandingkan kedua nilai tersebut; perbedaan keduanya adalah tanda bahwa interpreter berjalan dari dalam sebuah venv.
Membekukan Daftar Paket #
Terakhir, kita catat seluruh paket terpasang beserta versinya ke dalam bentuk yang siap dibagikan:
pip freezeOutput yang Dihasilkan:
numpy==2.5.4Format nama==versi itulah isi berkas requirements.txt. Rekan kerja yang menerima berkas tersebut dapat membangun ulang lingkungan yang identik dengan pip install -r requirements.txt — mekanisme lengkapnya kita bahas pada Chapter Manajemen Dependensi.
Ringkasan #
Pada Chapter ini kita membuat venv di /tmp/demo-venv, mengaktifkannya, memasang NumPy tanpa menyentuh interpreter utama, membuktikan isolasi lewat sys.prefix, dan membekukan daftar paket dengan pip freeze. Dengan pola ini, setiap proyek deep learning memiliki ruang paketnya sendiri dan bebas dari konflik versi. Venv yang baru dibuat masih kosong; pada Chapter berikutnya kita mengisinya dengan Jupyter Notebook, antarmuka interaktif yang menjadi tempat utama kita bereksperimen dengan kode deep learning.