Photo by Shubham Dhage on Unsplash

Önce Sanal Ortam, Sonra Python!

Can Muslu
Pubso Yayın Topluluğu
7 min readMar 26, 2022

--

Python Sanal Ortamı Nedir?

Sanal ortam, İngilizceden (Virtual Environment kelimesinden) çevrilmiştir. Her programlama dili, barındırdığı paketlerle işlem yapmak için kendi yöntemlerine sahiptir. Python da yazılmış projelerin, kodlanırken kullanılan paketlere ortak olarak erişebileceği bir site-packages ortamına sahiptir.

Site-packages Kavramı

Bilgisayarındaki Python’a harici paketler yüklemek istediğinde bunlar site-packages adlı bir dizine yerleştirilir.

site import site
site.getsitepackages()

Python geliştirme ortamında bu kodlar yazıldığında program size bu dizinin yolunu gösteren bir dönüt verecektir.

Ya Birçok Projemiz Varsa?

Photo by Scott Graham on Unsplash

Yazılım yapmaya yeni başlayanların sandığının aksine program yazarken her seferinde en yeni teknolojiler kullanılmaz. Bazen yeni sürümün kararlı olmamasından bazen de sözü edilen teknolojinin belirli bir sürümünün projeye en uygun olmasından dolayı eski sürümler tercih edilebilir. Ve aynı anda birden fazla proje geliştiren birisiyseniz, bu projelerin aynı paketin farklı sürümlerini gerektirmesi durumunda mevcut Python ortamının bu çeşitlilik ortamını sağlayamayacağını tahmin edebilirsiniz.

Bu noktada sanal ortam kavramı, paylaştırılmış Python ortamını her proje için ayrıştırmayı sağlar.

Benzer bir şekilde aynı projeyi farklı teknoloji ortamlarında denemek istediğimizde aynı bölgede farklı ortamlar oluşturmayı sanal ortamlarla yaparız.

Oluşturulan bir sanal ortam kurulduğu dizinde bulunur ama aktif hale getirilmesi için proje açıldıktan sonra aktif edilmesi gerekir. İçerik, proje tarafından ancak böyle okunabilir.

Sanal ortam da bizlere bu yöntemlere kolay ve kullanışlı ulaşım sağlarken ortaya çıkıyor. Projelerimiz için gerekli kaynakları bulmamıza ve hazır çalışmalarla da etkileşime geçmemize olanak sağlayan bir uygulamadır.

Peki ya Python sanal ortamı? Python çalıştırılırken ihtiyaç duyulan dosyaları içinde bulunduran sanal ortamdır. Bizler kitaplık kurarken tüm paketler global olarak kurulacaktır ama bu bizim istemediğimiz bir özelliktir. Özellikle de birden fazla projede aynı anda çalışıyorsak… Python sanal ortam ise tam da burada devreye giriyor. Bizleri olası karışıklıklara karşı daha temiz ve düzenli bir kütüphaneyle karşılıyor. Bir proje için yaptığımız paket ve kütüphane değişiklikleri sadece o projeye özel oluyor. Bu sayede diğer projelerimizin olumsuz etkilenme ihtimalleri ortadan kalkıyor. Ayrıca birçok konuda da avantaj ve tasarruf imkanı sunuyor. Bunlardan bir sonraki başlığımızda bahsedeceğiz :)

Neden İhtiyaç Duyuyoruz?

Photo by Alex Chumak on Unsplash

Python özelinde genellikle bilgisayarlara Anaconda yükleniyor ve kullanılıyor. Ama zamanla özellikle de birden fazla proje üzerinde aynı anda çalışıldığı zaman kütüphanelerin ve paketlerin içerik olarak karışıklığa sebebiyet verdiği tecrübe ediliyor. Birtakım düzensizlikler meydana geliyor. Bu gibi problemlerin önüne de Python sanal ortam kullanarak geçiyoruz.

Biraz da Python sanal ortamı bizlere ne gibi kolaylıklar sağlıyor, neden ihtiyaç duyuyoruz ve neden kullanmalıyız bunlardan bahsedelim.

· Daha az depolama alanına ihtiyaç duyarsınız. Çünkü bütün paketleri değil sadece ihtiyaç duyduğunuz paketleri sunarak hizmet sağlar. Böylece bilgisayarınızı yormaz ve bilgi kirliliğinden kurtarır.

· Çalışma ortamınızın boyutunu küçültür. Bir nevi filtreleme sistemine benzetebiliriz. İhtiyaçlarınız doğrultusundaki verilere doğru kütüphaneler aracılığıyla ulaşırsınız.

· Hata ve sorun sayısını en aza indirger.

· Birden fazla projeyle çalışıyorsanız projeler arasındaki veri ve kütüphane karmaşasına engel olur. Erişimi ve yönetimi kolaylaştırır.

· Çalıştığımız projeyi farklı teknoloji ortamlarında kullanabilme ve çalıştırabilme imkanı sağlar.

· Projenizle globale hitap etmenizde kolaylık sağlar.

· Verileri paketler halinde sunmaları daha sistematik ve düzenli bir ortam oluşmasını sağlar.

Farklı Sanal Ortam Çözümlerinin Olma Sebebi

Photo by Possessed Photography on Unsplash

Yazılım dilleri modül veya paket adında kümeler içerir. Bunlar dilin tasarımcısı tarafından varsayılan olarak dile gömülebileceği gibi açık kaynak kod kültürü sayesinde gönüllü geliştiriciler (topluluk olarak adlandırılır) sayesinde dışarıdan da tasarlanıp paylaşılabilir. Böyle harici paketleri gerekli dilin paket yönetim sistemleri (Python için PIP gibi) aracılığıyla veya framework’ler halinde toplu olarak indirebiliriz.

Tek bir sanal ortam teknolojisinin birden fazla paketle çözülmeye çalışılmasının da nedenleri vardır. Bunlar;

· Sanal ortamın sürümlerini ayırdığı teknolojilerin (modül yerine programlama dili gibi) farklı olması

· Var olan sanal ortam paketlerini başka paketlerle birleştirip işi kolaylaştırmayı hedefleyen yeni paketler

· Benzer işlevdeki paketlerin topluluk veya çekirdek Python geliştirici ekibi tarafından tekrar ele alınması

Sanal Ortam Nasıl Kurulur?

Virtualenv

En popüler Python sanal ortam paketidir. Python çözümleyici (interpreter) dosyalarının doğrudan bir kopyasını oluşturur. Virtualenv ile oluşturulmuş bir sanal ortamı aktifleştirme kodu yazıldığında başına bin klasörü eklenir.

Cmd, PowerShell veya GitBash terminallerinden birini açın.

pip install virtualenv

ile bu paketi bilgisayarınıza kurun.

Sanal ortam kurmak istediğiniz proje dizininde terminali açın.

virtualenv sanal_ortam_ismi

kodu ile bu dizine sanal ortamınızı verdiğiniz ad ile oluşturursunuz.

virtualenv -p /usr/bin/pythonX.Y sanal_ortam_ismi

kodu ise aynı işlem sırasında kurulacak Python sürümünü de belirler.

Artık sanal ortam hazır.

source sanal_ortam_ismi/Scripts/activate

ile bu ortam aktifleştirilir.

Sanal ortamınız artık hazır ve aktif. Artık izole edilmiş ortamınızı özelleştirmeye başlayabilirsiniz.

deactivate

Aktif sanal ortamdan çıkılmak istendiğinde bu kod yazılır.

rm -r sanal_ortam_ismi

Kodu ile de istenen sanal ortam silinir.

Venv

Virtualenv’in muadili niteliğindedir. Python’un kendi geliştirici ekibi tarafından dile gömülü olarak tasarlanması ve güncel sürümlere uygunluğu nedeniyle yaygınlığı hızla artmaktadır. Python 3.3 ve üzerini destekler.

venv zaten Python’a gömülü olduğu için başta herhangi bir paket kurmanıza gerek yok.

Sanal ortam oluşturmak istediğiniz proje dizininde Cmd, PowerShell GitBash terminallerinden birini açın.

python -m venv sanal_ortam_ismi

kodu dizinde sanal_ortam_ismi adlı bir sanal ortam oluşturur.

myvenv/Scripts/activate

kodu sanal ortamı aktifleştirir.

Bu kod “… cannot be loaded because running scripts is disabled on this system” gibi mesaj eşliğinde çalışmayı reddedebilir. Bunun nedeni PowerShell’in yeterli yetkiye sahip olmamasıdır.

Bu durumda yeni bir PowerShell’i yönetici olarak çalıştırın. Gelen komut satırına:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

komutunu girin.

Artık sanal ortamımız çalışır durumda.

Pyenv

Bu paket, projenizi farklı Python sürümleriyle deneme yapmanızı veya doğrudan farklı projeleri farklı Python sürümleriyle yazmanızı sağlar.

PyEnv, Linux ve MacOS’i destekler ama Windows’u desteklemez. Bunun için topluluk tarafından bir eklenti olarak hazırlanmış PyEnv-Win paketini kullanmalısınız.

MacOS Kurulumu

Photo by Patrick Ward on Unsplash

Homebrew kullanarak PyEnv’i bazı gerekli kitaplıklarla birlikte kolayca yükleyebilirsiniz :

# install pyenv
brew install readline xz pyenv pyenv-virtualenv
# setup
export PATH=”~/.pyenv/bin:$PATH”
eval “$(pyenv init -)”
eval “$(pyenv virtualenv-init -)”

Oluşturma araçlarına sahip olduğunuzda Python’u kurmak için bazı kitaplıklara ihtiyacınız var:

libbz2-dev \
libsqlite3-dev \
llvm \
libncurses5-dev \
libncursesw5-dev \
tk-dev \
liblzma-dev

Yüklemeniz gereken birkaç kütüphane daha:

sudo yum install \zlib-devel \
bzip2 \
bzip2-devel \
readline-devel \
sqlite \
sqlite-devel \
openssl-devel \
xz \
xz-devel \
libffi-devel

PyEnv-Installer kullanarak derleme araçlarını ve diğer kütüphaneleri de kurmanız gerekli:

# install pyenv
PROJ=pyenv-installer
SCRIPT_URL=https://github.com/pyenv/$PROJ/raw/master/bin/$PROJ
curl -L $SCRIPT_URL | bash
# setup
export PATH=”~/.pyenv/bin:$PATH”
eval “$(pyenv init -)”
eval “$(pyenv virtualenv-init -)”

Microsoft kullanıcıları için PyEnv desteklenmediği için bir alternatif olarak Conda’yı önerebiliriz.

Pyenv-win (Windows için Pyenv)

Photo by Sunrise King on Unsplash

Aslında pyenv Windows’u desteklemez. Bu topluluk tarafından bir eklentidir.

pip install pyenv-win — target $HOME\\.pyenv

PowerShell’i açıp bu komutu yazarak paketi kurun.

PowerShell’i açıp bu komutu yazarak paketi kurun.

Windows arama çubuğuna “Uygulama yürütme diğer adlarını yönet” yazıp gelen ayarlardan Python Uygulama Yükleyicisi’ni inaktif yapın.

PowerShell’i açıp bu komutları yazarak paketi yetkilendirin:

[System.Environment]::SetEnvironmentVariable(‘PYENV’,$env:USERPROFILE + “\.pyenv\pyenv-win\”,”User”)[System.Environment]::SetEnvironmentVariable(‘PYENV_ROOT’,$env:USERPROFILE + “\.pyenv\pyenv-win\”,”User”)[System.Environment]::SetEnvironmentVariable(‘PYENV_HOME’,$env:USERPROFILE + “\.pyenv\pyenv-win\”,”User”)

Ardından yine PowerShell’de bu komutu yazarak Path’a (anlamsız geldiyse bu kavramı araştırmalısınız) tanıtma yapın.

[System.Environment]::SetEnvironmentVariable(‘path’, $env:USERPROFILE + “\.pyenv\pyenv-win\bin;” + $env:USERPROFILE + “\.pyenv\pyenv-win\shims;” + [System.Environment]::GetEnvironmentVariable(‘path’, “User”),”User”)

İşletim sisteminizin ana dizin olarak belirlediği konumda komut satırını açın.

pyenv rehash

Özel Python sürümü kurmak istediğiniz dizinde komut satırı açın. Buraya:

pyenv install -l

komutunu girin. Bu kurabileceğiniz desteklenen Python sürümlerini listeler.

pyenv install X.Y.Z

ile istediğiniz sürümü yükleyin. Bu komut karşınıza kurulum sihirbazı çıkartacak. Adımları takip edip tamamlayın.

pyenv versions

komutu ile yüklenip yüklenmediğini kontrol edin. Eğer yüklenmişse:

pyenv global X.Y.Z

veya

pyenv local X.Y.Z

koduyla versiyonumuzu global veya local olarak seçebiliriz.

Unutulmaması gereken ise kurulan versiyonlardan birine paket kurmak gibi eklemeler yapıldığında,

pyenv rehash

ile güncellemeler okutulmalıdır.

İstediğiniz Python sürümü kurulduktan sonra, artık IDE’nizi açarak spesifik Python Interpreter’inizi seçip kullanmaya başlayabilirsiniz.

Pipenv

Pipenv’i projeler arasındaki bağımlılık yöneticisi olarak özetleyebiliriz. Herhangi bir projede yapılan değişik başka projeyi etkilemez ve steril çalışma ortamları sunar.

Pipenv, venv ile pip’i birleştirerek her şeyi çok daha kolay hale getirir.

Cmd, PowerShell veya Git Bash komut satırlarından birini açarak kodlamaya başlayalım:

pip install pipenv

ile paketi kuruyoruz.

Kurulum yapmak istediğimiz projenin dizinine giriyoruz:

pipenv shell

ile oluşturduğumuz sanal ortamın içine giriyoruz.

Bu işlemi yaptıktan sonra alıştırdığımız satırdan sonra Pipfile dosyası oluşacaktır. İşte bu kısım bize üstte söylediğim avantajı sunan kısımdır. Dosyamıza çift tıkladığımız zaman içerisinde [[source]], [dev-packages], [packages] ve [requires] bölümlerinin olduğunu göreceksiniz. Sizler paket yüklemesi yaptığınız zaman packages bölümünde ilerleme göreceksiniz. Gerisini dilediğiniz gibi şekillendirebilirsiniz.

pipenv install X

komutuyla istediğimiz paketi (X paketin adını temsil eder) bu sanal ortam içerisine kurabiliriz.

Kaynakça

site-packages: kaynak1
virtualenv & venv: kaynak1, kaynak2
pyenv: kaynak1
pipenv: kaynak1
pyenv-win: kaynak1, kaynak2

Yazarlar

--

--

Can Muslu
Pubso Yayın Topluluğu

Cesurlar bir gün, ama korkaklar her gün ölür. Kendi fikirlerinden korkmak, kendi kendini her gün öldürmek gibidir.