Virtualenv nedir? Neden virtualenv? Sanal ortam neden önemlidir?

Malum python 2.7 ömrünü tamamladı ve artık python 3 çağı. Eğer siz de azcık python ile orta ileri seviye projeler yapmaya başladıysanız python'un asıl gücünü zengin kütüphanelerinden aldığını görürsünüz. Ama tabi ki böyle zengin olmasının da kötü yanları yok değil. Mesela versiyonlama. Bir kütüphanenin belli bir versiyonu sadece bir python versiyonuyla çalışıyor olabilir vs. Öyle olunca eğer ki sistem üzerinde global yüklü python'u kullanırsanız versiyonlarda sıkıntı yaşayabilirsiniz. Onun için virtualenv anaconda miniconda gibi yazılımlar imdada yetişiyor. Bunlar doğrudan sistem python'unu kullanmak yerine kendileri istediğiniz versiyonda sanal bir python ortamı yaratıp pip vs yüklüyor. Böylece onu aktive edip istediğiniz paketleri kütüphaneleri istediğiniz versiyonda kullanabiliyorsunuz. Bunun güzelliği projenizin geliştirme yaptığınız bilgisayardan bağımsız bir hale bürünmesi. Projeniz taşınabilir hale geliyor. Sıfırdan bir linux server açıp direk aynı virtualenv sanal ortamını kurup paketleri yükleyip projenizi çalıştırabilirsiniz. Böylece makinemde şu yüklüydü durun kara murat benim lokalimde çalışıyordu gibi sebeplere gerek kalmaz.

Virtualenv komutlari

  • pip yüklü değilse
    • Ubuntu/debian kullaniyorsaniz: sudo apt install python3-pip
    • Başka bir işletim sistemi kullanıyorsanız curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py; python get-pip.py
    • Yüklüyse üstteki adımı atlayın ve direk aşağıdakileri deneyin: sudo pip install virtualenv
    • Veya: sudo easy_install virtualenv

Öncelikle sanal ortam yaratıyoruz.

virtualenv -p python3 venv

venv adinda bir klasör yaratılacak ve içinde sizin için python3 pip pip3 gibi çalıştırılabilir dosyalar olacak.

source venv/bin/activate
python -v
pip -v

pip install numpy
python -c 'import numpy'

Aktive ettiğimiz sanal ortamda numpy kütüphanesini pip ile kurduk ve yine aynı sanal ortamın python çalıştırılabiliriyle (executable) numpy'i import ettik. Hata yoksa bu olayı tamamlamış oldunuz. Varsa yorumlara yazın yardımcı olayım.

Virtualenv ve requirements.txt

Genelde projelere 3. parti kütüphaneler eklerken bunları requirements.txt'ye koyarız ki projeye yeni başlayan insanlar makinelerini ilk başta hazırlarken bunları sanal ortamlarına yüklerler böylece geliştirme aşamasında conflict olmaz.

Örnek bir requirements.txt

numpy
scipy
jinja2==2.7.3

Eğer versiyon girmezseniz latest yani en güncel versiyon pypi'den çekilir. Python package index'in kısaltması.

Bunu yüklemek için de

pip install -r requirements.txt

Paketleri bir klasöre yüklemek - daha iyi taşınabilirlik.

Bazen direk kütüphaneleri de projeye bir klasör olarak eklemek isteyebiliriz. Hiç iyi bir fikir değil ama bazen gerekebilir (google App engine mesela).

pip install -r requirements.txt -t lib/

lib diye bir folder yaratilip paketler icine indirilir. Sonra bunlari şöyle import edebiliriz python script içinde:

import sys
sys.path.append('lib')
import numpy