python'da sanallaştırma kalıntıları
Python'da Sanallaştırmanın Önemi ve temizliği
Rastlantı - giriş
Hiç geliştirme yaptığınız projenin dizinine baktınız mı?, hayır geliştirdiğiniz projenin konumlandığı üst dizinden bahsediyorum. Açıkçası, bu dizinlerin ne kadar çok yer kapladığını ve bir yerden bir yere taşımak istediğimde bana saatler sürecek bir iş çıkarabileceğini hiç beklemiyordum
Sanalşatırma
Eğer Python'da geliştirme yapıyorsanız, muhtemelen virtualenv kavramını sıkça duymuşsunuzdur. Eğer duymadıysanız üzülmeyin, size kolaylıkla Python'da sanallaştırma hakkında bilgi edinebileceğiniz bir kaynak bırakıyorum. Ancak kısaca özetlemem gerekirse, projelerde kullanılan kütüphaneleri ve bağımlılıkları izole etmek için kullanılan bir araçtır. Sürümlerin çakışmasını önlemek önceliklerimizden biri olmalıdır.
Zamanla Artan Dosya Yükü
Python projeleri geliştirirken, sanallaştırma kullanmanın dezavantajlarından biri zamanla artan dosya yüküdür. Kullandığımız bağımlılıklar genellikle sanallaştırma dizinine yüklenir ve bu dizinin adı genellikle venv'dir. Sürekli projeler arasında geçiş yaparken, bazen yarım bırakılmış ve unutulmuş projelerim olmuştur. Bugün bilgisayarıma temiz bir kurulum yapmak için yedek almaya başladım ve fark ettim ki, diğer dosyalara nispeten daha az olmasına rağmen, 10.7 GB'lık bir PythonProjects dizininin boyutu transfer işlemini uzatıyordu. Bunun sebebi, basit sanallaştırmada kullandığımız dosyaların içerisinde dallanıp budaklanan dosyalar ve klasörler sürekli oku/yaz işlemi sayısını artırdığından dolayı geciktirmesi ve transferi yavaşlatmasıydı. Bu durumu tespit ettikten sonra çözüm arayışına girdim.
Çözüm
Çözüm oldukça basitti: Proje dosyalarımızı tek tek açıp içerisinde bulunan sanallaştırma dosyalarını temizlemekti. Ancak, bu işlemi manuel olarak yapmak ve her projeyi tek tek kontrol etmek oldukça zaman alıcıydı. Bir yazılımcı olarak, yazılımcıların tekrarlanan işlerden pek hoşlanmadığını söyleyebilirim. Daha etkili ve kalıcı bir çözüm bulmalıydık.
Bulacağımız çözümün özellikleri şunlar olmalıydı:
- Projelerimizi tek tek taramalı ve sanallaştırma dosyalarını bulmalı.
- Her projede kullanılan tüm bağımlılıkların bir listesini çıkarmalı, böylece projeyi tekrar kullanmak istediğimizde sanallaştırmayı kurup devam edebilmeli.
- Ve son olarak, sanallaştırma dizinlerini silmeli akabinde raporlamalıydı.
Bu genel özellikler doğrultusunda, projemiz içinde proje dizinini ve çeşitli ayarları alacağımız ara yüzü terminal üzerinden hazırlamaya karar verdim.
scripten projeye
Gördüğünüz kodu önceden yazmıştım, bu kod bulunduğu dizindeki dosyaları tek tek tarar ve sanallaştırma dosyalarını arar. Bir dosya bulduğunda, ne yapmak istediğinizi sormak için size bir soru sorar ve ardından seçiminize göre devam ediyordu birkaç eksiği olduğunu söylemeliyim öncelikle sadece dizini siliyor ve eğer projenizde bir bağımlılık kullandıysanız geçmiş olsun sonrasında venv kurup çalıştırmak istediğinizde bağımlılıkların eksik olduğunu bildiren hatalar alacaksınız daha kötüsü eğer bağımlılık versiyonu sizin kullandığınız zamandan farklılık gösterdiyse bu seferede uyumluluk sorunu yaşayacaksınız. işe bu durumu göz önünde bulundurarak çözüm adına birkaç gereksinim belirledim
Teknik Kısımlarına Girmeden
- Ayarları sonradan değiştirebiliriz diye bir
config.py
dosyası oluşturdum. - Birbirinden farklı gerekli araçları bir arada organize etmek için
utils.py
dosyasında kodladım. - Son olarak, ana amacımız olan sanallaştırma temizliği için
main.py
dosyasında gerekli diyalogları ekledikten sonra test ettim.
test
![]() |
![]() |
---|
Kodumu test etmek için 3 adet boş proje oluşturdum ve kodu çalıştırdım. Kontrol etmem gereken ilk şey venv dosyasının silinip silinmediğiydi. Heyecanla istediğimi almış olmayı umarak dizine girdim ve içerisi boştu. Tek bir dosya vardı: Bağımlılıkların olduğu bir text dosyası. Ona requirements_backup.txt adını verdim çünkü diğer requirements.txt dosyası ile çakışmasını istemiyordum.
sonuç
Aslında, scriptin daha fazla yer açmasını bekliyordum, ancak projede kullandığım çeşitli medya dosyalarının da olmasından dolayı bu beklentim gerçekleşmedi.
Ancak, günün sonunda sanallaştırma dizinleri silinmiş ve yer açılmıştı. Bu da scriptin işe yardığını göstermektedir.
Yaklaşık olarak %73.7'lik bir alan silinmiştir.
kaynak kodları
Eğer diskinizde biraz daha yer açmak veya kodu incelemek isterseniz kullanım talimatlarıyla birlikte Github'da bulabilirsiniz. Eğer makalem hoşunuza gittiyse, projeme bir yıldız atabilir ve düşüncelerinizi veya önerilerinizi yorum yaparak paylaşabilirsiniz.
github https://github.com/F4ruk-seker/venv-cleanner
-
saygılarla Faruk şeker