Belajar Menggunakan Virtualenv

Waktu awal-awal belajar django, saya sedikit ‘dipusingkan’ dengan Virtual Environment (virtualenv).

Banyak tutorial menyarankan menggunakan virtualenv. Bahkan tidak hanya untuk django saja.

Sepertinya virtualenv adalah tools yang harus digunakan pada pengembangan aplikasi Python.

Apa itu vritualenv?

Kenapa kita harus menggunakan virtualenv?

Bagaimana cara menggunakan vritualenv?

Mari kita bahas…

Apa itu Virtualenv?

Vritualenv adalah tools untuk membuat lingkungan python virtual yang terisolasi.

Terisolasi artinya tertutup dan tidak bisa diakses dari dunia luar.

Vritual Environment Python

Program Python yang berjalan di dalam virtualenv memiliki modul-modulnya sendiri dan program dari luar tidak bisa mengaksesnya.

Sedangkan program Python yang berjalan tanpa vritualenv hanya bisa menggunakan modul-modul global saja, yang berada di /usr/lib/python2.7/site-packages.

Kenapa Menggunakan Vritualenv?

Saat kita menginstal modul/library menggunakan pip, modulnya akan terinstal secara global di /usr/lib/python2.7/site-packages.

Semua aplikasi bisa mengakses dan menggunakannya.

Apakah ini bagus?

ya bagus, tapi masalahnya begini:

Misal, pada hari ini kita membuat proyek aplikasi menggunakan django 1.1.

Aplikasi berjalan dengan sempurna menggunakan modul versi 1.1.

Lalu beberapa waktu kemudian, django rilis versi baru… aggaplah versi 4.0.

Kita kemudian melakukan upgrade modul.

Akan tetapi, aplikasi yang sudah kita buat tidak bisa berjalan dengan modul versi baru ini, karena banyak perubahan fungsi dan lain-lain.

Sementara itu, ada proyek aplikasi lain yang diharuskan menggunakan modul versi itu.

Bentrok antar aplikasi python

Karena itu… kita membutuhkan virtualenv, agar masing-masing aplikasi memiliki modulnya sendiri.

Solusi Menggunakan Vritualenv

Bagaimana Cara Menggunakan Vritualenv?

Untuk dapat menggunakan Virtualenv, kita harus menginstalnya terlebih dahulu.

Instalasi Vritualenv

Virtualenv dapat kita instal dengan berbagai cara, salah satunya bisa melalui apt.

apt install virtualenv

atau:

apt install python-virtualenv

atau (untuk python3):

apt install python3-virtualenv

Atau bisa juga menggunakan pip:

[sudo] pip install virtualenv

untuk versi terbaru:

[sudo] pip install https://github.com/pypa/virtualenv/tarball/develop

Atau juga bisa dengan cara tradisional, yaitu men-download paket tar, ekstrak, lalu install dengan setup-tools.

curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-X.X.tar.gz
tar xvfz virtualenv-X.X.tar.gz
cd virtualenv-X.X
[sudo] python setup.py install
✍️ Catatan:

Silahkan instal dengan cara yang kamu sukai. Penggunaan [sudo] pada perintah, akan menginstal virtualenv secara global.

Untuk memastikan sudah terinstall dengan benar, coba ketik perintah berikut:

[email protected] ~ $ which virtualenv
/usr/local/bin/virtualenv
[email protected] ~ $ virtualenv --version
15.1.0
[email protected] ~ $ 

Membuat Virtualenv

Setelah menginstal virtualenv, barulah kita bisa menggunakannya untuk membuat lingkungan virtual.

Mari kita buat sebuah proyek baru, buat direktori bernama my-project.

mkdir my-project

Setelah itu, buat virtual environment di sana.

cd my-project
virtualenv my-env

Saat kita mengetik perintah virtualenv my-env, virtualenv akan otomatis membuat lingkungan virtual dan direktori baru bernama my-env.

my-project/
└── my-env/
    ├── bin
    ├── include
    ├── lib
    ├── local
    └── pip-selfcheck.json

Di dalamnya terdapat direktori untuk menyimpan modul-modul dan file binary untuk digunakan oleh aplikasi.

Mengakses Vritualenv

Setelah kita membuat virtual env, kita bisa mengaktifkan dan menonaktifkannya dengan cara berikut.

Aktifkan virtualenv:

source my-env/bin/activate

Atau kita bisa singkat source dengan titik (.):

. my-env/bin/activate

Maka sekarang, kita sudah masuk ke dalam lingkungan virtual.

Mengaktifkan Virtualenv

Sekarang kita bisa menginstal modul apapun di sini, tanpa harus menggangu proyek atau aplikasi yang lain.

Mari kita coba menginstal flask.

Flask adalah mikro framework untuk membuat web dengan bahasa pemrograman python.

Silahkan kietik perintah berikut untuk menginstalnya melalui pip:

pip install Flask

Tunggulah beberapa saat, Flask sedang diinstal.

Instalasi Flask

Sekarang coba ketik perintah flask --version, maka akan keluar keterangan versi Flask yang terinstal.

(my-env) [email protected] ~/Desktop/my-project $ flask --version
Flask 0.12.2
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609]

Selanjutnya, coba keluar atau nonaktifkan virtual environtment dengan perintah deactivate dan coba lagi perintah flask --version.

Apa yang akan terjadi?

Deaktivasi Virtualenv

Yap! Perintah flask tidak lagi dikenali, karena belum terinstal di lingkungan OS (global).

Coba lagi masuk ke virtualenv, dan eksekusi flask.

. my-env/bin/activate
flask --version

Pasti bisa… karena sudah terinstal di sana.

Masih belum paham?

Mari kita coba membuat aplikasi Flask sederhana.

Silahkan buat file hello.py di dalam direktori proyeknya, kemudian isi kodenya seperti berikut:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

Setelah itu coba untuk mengeksekusi dari lingkungan OS dan lingkungan virtual dengan perintah:

FLASK_APP=hello.py flask run

Eksekusi di lingkungan OS:

[email protected] ~/Desktop/my-project $ FLASK_APP=hello.py flask run
No command 'flask' found, did you mean:
 Command 'flasm' from package 'flasm' (universe)
flask: command not found

Eksekusi di lingkunan virtual:

[email protected] ~/Desktop/my-project $ . my-env/bin/activate
(my-env) [email protected] ~/Desktop/my-project $ FLASK_APP=hello.py flask run
 * Serving Flask app "hello"
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Sukses!

Untuk melihat hasilnya silahkan buka http://localhost:5000.

Aplikasi Flask

Apa Selanjutnya?

Kita sudah mengenal dan belajar cara menggunakan Virtualenv, selanjutnya kita bisa bisa menggunakannya untuk keperluan sehari-hari.

Punya pertanyaan atau pengalaman menggunakan Virtualenv?

Mari sampaikan melalui komentar…