Manajemen Lingkungan dan Dependensi
Virtual environment, pengelolaan requirements.txt, dan diagnosis sistematis untuk ModuleNotFoundError.
Bab ini menjawab satu pertanyaan yang hampir pasti pernah kamu alami: "Kenapa kode yang sama bisa berjalan di satu komputer tapi error di komputer lain?"
Jawabannya hampir selalu bukan pada kodenya, tapi pada lingkungan tempat kode itu dijalankan. Bab ini menjelaskan mengapa perbedaan lingkungan bisa menyebabkan masalah, dan bagaimana cara mengendalikannya secara sistematis.
2.1 Mengapa Isolasi Lingkungan Diperlukan
Ketika kamu menginstal sebuah library Python, library itu tidak hanya berdiri sendiri. Ia membawa serta sejumlah library lain yang dibutuhkannya untuk bekerja, disebut dependencies. Setiap dependency ini memiliki versi tertentu.
Masalah muncul ketika dua proyek yang berbeda membutuhkan versi yang berbeda dari library yang sama.
Ini bukan masalah yang hipotetis. Dalam praktik AI Engineering, kamu akan sering bekerja dengan beberapa proyek sekaligus, masing-masing mungkin menggunakan versi LangChain, NumPy, atau library lain yang berbeda. Tanpa isolasi, menginstal library untuk satu proyek bisa merusak proyek yang lain.
Virtual environment menyelesaikan masalah ini dengan cara yang sederhana: setiap proyek mendapatkan instalasi Python dan library-nya sendiri yang sepenuhnya terpisah dari proyek lain.
2.2 Cara Kerja Virtual Environment
Python menyediakan modul venv secara bawaan, tidak perlu menginstal apapun untuk membuatnya. Ketika kamu membuat virtual environment, Python membuat sebuah direktori baru yang berisi salinan interpreter Python dan ruang kosong untuk menginstal library.
Ketika virtual environment diaktifkan, semua perintah Python dan pip yang kamu jalankan di terminal akan menggunakan instalasi yang ada di dalam direktori itu, bukan instalasi Python global di sistem.
proyek-ai/
├── main.py
├── requirements.txt
├── .env
├── .gitignore
└── venv/ (dibuat oleh: python -m venv venv)
├── bin/ atau Scripts/ (python, pip, activate)
├── lib/ (semua library terinstal)
└── pyvenv.cfg (konfigurasi: versi Python, lokasi Python global)
Direktori venv/ tidak boleh dimasukkan ke dalam Git. Ukurannya bisa mencapai ratusan megabyte dan tidak perlu dibagikan ke orang lain, mereka bisa membuatnya sendiri dari file requirements.txt. Pastikan venv/ sudah ada di dalam .gitignore (dibahas lebih detail di Bab 4).
2.3 Siklus Kerja Virtual Environment
Ada empat perintah utama yang perlu dikuasai. Keempat perintah ini membentuk siklus kerja yang akan kamu ulang di setiap proyek baru.
1. Membuat Virtual Environment (Sekali per Proyek Baru)
Membuat direktori venv/ di dalam folder proyek kamu. Python yang digunakan adalah Python yang sedang aktif di sistem saat perintah ini dijalankan.
# Windows
python -m venv venv
# Mac/Linux
python3 -m venv venv
2. Mengaktifkan Virtual Environment (Setiap Kali Membuka Terminal Baru)
Setelah diaktifkan, tanda (venv) akan muncul di sebelah kiri prompt terminal. Ini adalah sinyal visual bahwa kamu sudah berada di dalam lingkungan yang terisolasi.
# Windows
venv\Scripts\activate
# Mac/Linux
source venv/bin/activate
3. Menginstal Dependencies (Setelah Aktivasi, atau Saat Ada Library Baru)
Jika proyek memiliki file requirements.txt, gunakan perintah pertama untuk menginstal semua library sekaligus. Jika tidak, instal library satu per satu dengan perintah kedua.
# Dari requirements.txt
(venv) pip install -r requirements.txt
# Library tunggal
(venv) pip install langchain pandas
4. Menyimpan Daftar Dependencies (Setiap Kali Menginstal Library Baru)
Perintah ini membuat atau memperbarui file requirements.txt dengan daftar semua library yang terinstal beserta versinya. File inilah yang dibagikan ke rekan tim, bukan direktori venv/ itu sendiri.
# Windows & Mac/Linux
(venv) pip freeze > requirements.txt
2.4 Memahami File requirements.txt
File requirements.txt adalah daftar tertulis dari semua library yang dibutuhkan proyek kamu untuk berjalan, beserta versi spesifiknya. Ini adalah cara standar untuk memastikan siapapun yang menjalankan proyekmu mendapatkan lingkungan yang identik.
Berikut adalah contoh file requirements.txt untuk proyek AI Engineering yang umum, beserta penjelasan fungsi setiap library.
| Library | Fungsi | Kategori |
|---|---|---|
pandas==2.2.0 | Manipulasi dan analisis data tabular untuk membersihkan data sebelum masuk ke pipeline AI | Data |
numpy==1.26.4 | Operasi array numerik berkecepatan tinggi, dipakai saat bekerja dengan embedding | Data |
langchain==0.3.0 | Framework orkestrasi untuk aplikasi berbasis LLM: chaining, retrieval, agent | AI |
langchain-google-genai==2.0.0 | Integrasi LangChain dengan model Gemini dari Google | AI |
pinecone==5.0.0 | Client untuk vector database Pinecone, menyimpan dan mencari embedding untuk RAG | AI |
fastapi==0.115.0 | Framework untuk membangun API backend, mengekspos sistem AI sebagai endpoint HTTP | Infrastruktur |
uvicorn==0.30.0 | Server ASGI untuk menjalankan aplikasi FastAPI, selalu diinstal bersama FastAPI | Infrastruktur |
python-dotenv==1.0.1 | Membaca variabel dari file .env ke environment Python, wajib untuk manajemen API Key (Bab 3) | Utilitas |
requests==2.32.0 | Library standar untuk HTTP request ke API eksternal, dipakai di Bab 1 | Utilitas |
2.5 Mendiagnosis ModuleNotFoundError
ModuleNotFoundError adalah error yang paling sering muncul di minggu pertama dan paling mudah diselesaikan, jika kamu tahu urutan langkah diagnosisnya. Hampir selalu, penyebabnya bukan library yang belum terinstal, tapi virtual environment yang salah atau tidak aktif.
Ada satu hal yang sering membingungkan pemula: nama package yang diinstal via pip tidak selalu sama dengan nama yang digunakan saat import. Selalu cek dokumentasi resmi jika import gagal meski library sudah terinstal.
| Perintah pip install | Nama saat import | Keterangan |
|---|---|---|
pip install pandas | import pandas | Sama persis |
pip install python-dotenv | from dotenv import load_dotenv | Nama pip mengandung "python-", nama import tidak |
pip install pillow | from PIL import Image | Nama pip sama sekali berbeda dari nama import |
pip install scikit-learn | import sklearn | Tanda hubung dihilangkan, nama dipersingkat |
pip install beautifulsoup4 | from bs4 import BeautifulSoup | Nama pip mengandung versi, nama import dipersingkat |
pip install langchain-google-genai | from langchain_google_genai import ... | Tanda hubung diganti underscore saat import |
pip install fastapi | from fastapi import FastAPI | Sama, tapi nama class berbeda dari nama module |
Kesalahan Umum
Jika kamu menginstal library ke Python global, library itu tidak akan tersedia di dalam virtual environment proyekmu. Selalu pastikan (venv) muncul di terminal sebelum menjalankan perintah pip apapun. Ini adalah sumber kebingungan nomor satu di minggu pertama bootcamp.
Direktori venv/ bisa berukuran ratusan megabyte dan berisi path yang spesifik untuk komputermu. Mengunggahnya ke GitHub tidak hanya boros storage, tapi juga tidak akan berfungsi di komputer orang lain. Pastikan venv/ sudah tercantum di .gitignore (dibahas di Bab 4).
Setiap library yang kamu instal biasanya membawa library lain sebagai dependensinya. Ketika kamu menjalankan pip freeze, semua library itu ikut tercatat. Ini normal file requirements.txt yang dihasilkan memang lebih panjang dari yang kamu instal secara manual.
Terminal baru tidak otomatis mengaktifkan virtual environment dari sesi sebelumnya. Ini adalah hal pertama yang perlu dicek setiap kali kamu mulai sesi coding sebelum menjalankan kode apapun. Jika (venv) belum muncul, jalankan perintah aktivasi dulu.
Kebiasaan ini memastikan siapapun yang meng-clone proyekmu bisa mendapatkan lingkungan yang identik hanya dengan satu perintah: pip install -r requirements.txt. Jika kamu lupa memperbarui file ini, rekan tim atau sistem deployment akan mendapat error yang sulit dilacak penyebabnya.
Ringkasan Bab 2
- Saya memahami mengapa konflik dependensi bisa terjadi dan bagaimana virtual environment menyelesaikannya.
- Saya bisa membuat virtual environment baru menggunakan
python -m venv venv. - Saya tahu cara mengaktifkan virtual environment di sistem operasi yang saya gunakan, dan tahu cara memverifikasi bahwa aktivasi berhasil.
- Saya bisa menginstal semua dependencies dari file
requirements.txtmenggunakanpip install -r requirements.txt. - Saya bisa memperbarui
requirements.txtmenggunakanpip freezesetelah menginstal library baru. - Saya memahami bahwa nama package di pip dan nama saat import tidak selalu sama, dan tahu cara memeriksa nama yang benar.
- Saya bisa mendiagnosis ModuleNotFoundError secara sistematis menggunakan urutan langkah yang sudah dipelajari di bab ini.
- Saya tahu bahwa direktori
venv/tidak boleh dimasukkan ke dalam Git, dan sudah menambahkannya ke.gitignore.