Python Sanal Ortam (Virtual Environment)
Eğer python ile programlamaya ya da veri bilimi (1) ile ilgilenmeye yeni başladıysanız bir yerlerde bu ifade gözünüze çarpmış ya da duymuş olmalısınız. İşte Medium’daki bu ilk yazımda sanal ortam nedir, neden ihtiyaç duyarız, sanal ortam araçları nelerdir, vb. sorulara cevap vermeye çalışacağım.
Sanal ortam nedir?(2) Sanal ortam, en basit hâliyle, farklı python projelerini birbirinden bağımsız/izole şekilde kullanmaya yarayan yapıdır. Bu yapının içerisinde Python yorumlayıcıları, kütüphaneler ve betikler bulunur. Etkin ortam üzerinde yapılan değişiklikler diğer sanal ortamları etkilemez.
Neden ihtiyaç duyarız? Bir projede kullanılacak kütüphanelerin başka bir projede gerekli olmadığı durumlarda sanal ortam oluşturarak yer ve zamandan kazanırız. Örneğin; PyQt kütüphanesi ile kullanıcı arayüzü geliştirdiğimiz bir projede Scikit-learn’ün olmasının anlamı yoktur. Ya da Python 3.1 yerine 2.7 sürümünü kullanmak istediğimizde de sanal ortamlar ihtiyacımızı karşılayacaktır.
Sanal ortam araçları nelerdir? Birçok yönetim aracı olmakla birlikte popüler olanlar şunlardır: Conda, Venv, Virtualenv, Pipenv ve Poetry. Bu yazıda Conda’yı ele alacağım.
Conda yalnızca bir sanal ortam yönetim aracı ya da paket yöneticisi değil, bir Python ekosistemi gibidir. Birçok paket yöneticisi gibi PyPi deposunu kullanmak yerine kendi paket deposunu kullanır.
Sanal ortam kurulumu nasıl yapılır? Conda’yı kullanabilmek için Anaconda ya da Miniconda’nın sisteminizde yüklü olması gerekir. Windows ve MacOS kurulumları ile ilgili bir çok kaynak bulunabilir. Ben Linux üzerinde anlatacağım. Arch Linux üzerinde AUR araçları ile kurulum yapılabilir.(3)
$ yay -S anaconda
Komut satırında “komut bulunamadı.” ifadesi ile karşılaşılırsa kabuk bu komutun nerede olduğunu bulamıyor demektir. Bulabilmesi için yine komut satırında aşağıdaki komut ile üstesinden gelebiliriz. Genellikle öntanımlı olarak ~/anaconda3
‘da bulunur.
$
export PATH=$PATH:$HOME/username/anaconda3/bin\"
username
yazan yeren kendi kullanıcı adınızı yazmayı unutmayın. Her komut satırını kapatıp açtığınızda bu komutu girmek yerine ~/.bash_profile
‘da kalıcı hâle getirebiliriz. Herhangi bir metin düzenleyici ile yapabildiğimiz gibi komut satırı üzerinden de gerekli işlemi yapabiliriz.
PATH=$PATH:$HOME/anaconda3/bin
source ~/.bash_profile
Sanal ortam nasıl oluşturulur ve yönetilir?(4) Kurulumun ardından conda emrimize amade. Şimdi bir sanal ortam oluşturduktan sonra paket yüklemeyi, silmeyi, yüklü paketleri listelemeyi, vb. işlemlerin nasıl yapıldığına bakalım.
Conda ile 4 farklı şekilde sanal ortam oluşturulabilir: Boş bir sanal ortam, belirli bir python sürümü ile ya da hem belirli bir python sürümü hem de yüklenmek istenen paketler ile. Son olarak daha önce oluşturulmuş bir sanal ortamdan üretilen .yml uzantılı yaml dosyası ile kurulum. Bu kurulum şeklini bu yazıyı daha fazla uzatmamak için başka bir yazıda ele alacağım.
Öncesinde hali hazırda oluşturulmuş sanal ortamları listeleyelim:
conda env list
Buradaki listede * ile işaretli olan ortam o anda aktif olarak kullanılıan ortamdır.
conda create -n myenv
conda create -n myenv python=3 numpy pandas
conda create -n myenv python=3
Komut çalışıp tamamlandıktan sonra tekrar sanal ortamları listeleyip yeni oluşturduğumuz sanal ortamı gözlemleyebiliriz. Aktif olan sanal ortam * ile işaretlenir. Yeni oluşturduğumuz sanal ortamı aktive edip üzerinde çalışmaya başlayabiliriz.
conda activate myenv
Uyarı: Bu noktadan sonra yapılacak paket yükleme, silme, güncelleştirme işlemleri, o anda aktif olan sanal ortam üzerinde yapılır. Diğer sanal ortamları etkilemez.
Conda ihtiyacınız duyduğunuz paketleri kurarken, arka planda paketler arası bağımlılıkları çözümler. Kuracağınız paketin sürümü ile o paketin ihtiyaç duyduğu başka paketlerin sürümlerinin birbiri ile uyumlu olması gerekir.
conda install numpy
Bu sanal ortamda kurulu olmayan ama numpy’ın ihtiyaç duyduğu blas, mkl, six gibi paketler yüklenecek (will be INSTALLED), certifi paketi güncellencektir(will be UPDATED). Sürüm düşürülmesi gereken paket varsa ayrıca belirtilir(will be DOWNGRADED).
Bir paketin belirli bir sürümü de kurulmak istenebilir:
conda install numpy=1.10
Aktif sanal ortamda kurulu olan paketleri de listeleyebiliriz:
conda list
Sanal ortamı silmek istediğimizde önce deaktif etmeliyiz:
conda deactivate
Bu işlem ile conda, öntanımlı olan base ortamı aktif edecektir. Ardından sanal ortamı silebiliriz:
conda env remove -n myenv
İhtiyaç duyacağımız diğer komutlar ise şu şekildedir:
Bir paketin silinmesi:
conda remove numpy
Bir paketin güncellenmesi:
conda update numpy
Tüm paketlerin güncellenmesi:
conda update -all
Conda’nın yükseltilmesi:
conda upgrade conda
Tüm paketlerin yükseltilmesi:
conda upgrade -all
Bir paket aramak:
conda search numpy
Paket isminde numpy geçen paketleri aramak için:
conda list | grep numpy
Sonraki yazıda bir yaml dosyasında sanal ortamın kurulmasını ele alacağım.
Kaynak:
(1) Mustafa Vahit Keskin Data Science and Machine Learning Bootcamp
(2) https://docs.python.org/3/library/venv.html