Python Virtual Environment(sanal ortam) Ve Paket Yönetimi
Tags: python, virtualenvironment, linux
Published: 2020-07-29 22:27:38

# Virtual Environment nedir ?
Virual Environment, projelerimizde gerekli olan paketleri, sistemden bağımsız bir şekilde kurup, kullanmamızı olanak sağlayan bir yapıdır. En basit şekilde şöyle düşünebiliriz, gerekli bütün paketleri aslında proje için açmış olduğumuz dizine yüklüyor ve paketleri ihtiyaç halinde yine projenin içinde olduğu dizinden çekiyor. Bu bize neden gereklidir diye düşündüğümüzde şöyle bir senaryo üzerinden gidelim.
Örneğin A projesinde bir X paketinin 1.2.1 versiyonunu kullanmamız gerekiyor, farklı bir B projesinde ise aynı X paketinin 2.1 versiyonuna ihtiyaç duyduğumuz bir senaryomuz var. Bu gibi durumlarda paket yönetimini kolaylaştırmak ve hata ile karşılaşma ihtimalini de düşürmek için virtual environment çok kullanışlı bir yapı olmuş oluyor. Bir paketi sildiğimizde veya yükselttiğimizde, o paketi kullanan diğer projelerin de etkilenmemesini sağlıyor. İstediğimiz projeye istediğimiz gibi paket kurabilir, silebilir, yükseltebiliriz ve diğer projeler bundan etkilenmez.

# Kurulum 
Eğer sisteminizde yüklü değilse öncelikle pip3(python paket yöneticisi) yüklemeniz gerekmektedir.
```bash
sudo apt-get install python3-pip
```
Python 2.X.X için de kurabilirsiniz. Onun için "python3-pip" yerine "python-pip" yazmanız yeterlidir. Eğer bilgisayarınızda her iki python sürümü için de yüklemek istiyorsanız, ikisi içinde ayrı ayrı komutları girmeniz gerekmektedir.

**Not:**Eğer sisteminizde virtual environment yüklü olup olmadığını kontrol etmek istiyorsanız bu komutu kullanabilirsiniz:
```bash
virtualenv --version
```
Siteminizde yüklü ise size version bilgisini döndürür, eğer yüklü değil ise "command not found" şeklinde bir hata ile karşılaşırsınız

Gerekli pip3 kurulumunu da yaptıktan sonra artık virtual environment kurulumuna geçebiliriz.
```bash
sudo pip3 install virtualenv
```
**Önemli Not:** Eğer herhangi python 2.X.X sürümü ile çalışıyorsanız "pip3" argümanı yerine "pip" şeklinde kullanmanız gerekmektedir."pip3" python 3.X.X sürümlerine, "pip" ise diğer sürümlerine kurulum yapmaktadır.

Virtual environment kurulduğundan emin olmak için tekrar kontrol edebiliriz.
```bash
virtualenv --version
```
Kurulum başarılı bir şekilde tamamlandıysa, bu komutun çıktısı olarak kurmuş olduğumuz virtual environment yapısının version bilgisini görebiliriz.

Kurulum işlemimizi de doğruladıktan sonra artık geliştirme ortamımızı oluşturabiliriz. Örnek bir ortam için öncelikle masaüstüne "denemeEnv" adında dizin oluşturalım. Terminalimizi de bu dizin içerisinde açalım.
Oluşturmuş olduğumuz bu dizine virtualenv kuralım ve sanal geliştirme ortamımızı oluşturacağız.
```bash
virtualenv projeAdi
```
Komutu ile bulunduğumuz dizine sanal geliştirme ortamımızı kurmuş olduk. Fakat henüz geliştirme ortamamız aktif değildir. Demek istediğimi uygulamada çok daha iyi anlayabilirsiniz.
Geliştirme ortamımızı aktif hale getirmek için:
```bash
source projeAdi/bin/activate
```
komutumuzu çalıştırıyoruz. Ve artık şunu görebiliriz
```bash
(projeAdi) hardrez@pardus:~/Desktop/denemeEnv$
```
Gördüğünüz gibi komutlarımız artık "(projeAdi)" alanında çalışmaktadır.
Burada "pip3/pip" ile kuracak olduğumuz bütün paketler sadece bu proje içerisinde yer almaktadır. 
Eğer bir başka bir projeye geçmek istiyorsak veya sanal ortamdan çıkmak istiyorsak:
```bash
deactivate
```
komutu ile sanal ortamdan çıkabiliriz. Aktişleştirmek için ise az önce belirttiğimiz komut ile tekrar o projeye ait sanal ortama girebilirsiniz.

Sanal ortamımızı aktif ettikten sonra, paket yöneticiniz ile hangi paketlerin kurulup kurulmadığını bu komutla kontrol edebiliriz.
```bash
pip3 list
```
Listeleme komutunun yanı sıra sadece yeni versionları çıkmış paketleri listelemek istiyorsak:
```bash
pip3 list --outdated
```
komutu ile yükseltebileceğimiz paketlerin listesini de görebiliriz.

Yüklü olan bir paketi yükseltmek için:
```bash
pip3 install --upgrade paketAdi
```
şeklinde komutumuzu kullanabiliriz.

Sanal ortama paket yükelemek istediğimizde yine normalde kullandığımız şekilde:
```bash
pip3 install paketAdi
```
istediğimiz paketimizi kurabiliriz.

Öncesinde paket kaldırabildiğimizden de bahsetmiştik. Ve kaldırdığımız bu paketler sadece bu proje için kalkıyor, sistemde herhangi bir değişikliğe sebep olmuyor(sanal ortamda olduğunuz sürece)
```bash
pip3 uninstall paketAdi
```
"paketAdi" kısmına kaldırmak istediğiniz paket adını girerek kaldırabiliriz.

Virtual environment kullanımı basitçe bu şekildedir, birden fazla proje ile çalıştığınızda veya büyük projlerde önemini çok daha iyi anlayabilirsiniz.