Python Kurulumu: Sanal Ortam (venv) Neden Şart?

Haberci

SEO UZMANI
Yönetici
Katılım
21 May 2023
Mesajlar
539
Tepki
17
Puan
18
805




İki farklı projede aynı kütüphanenin farklı sürümlerine ihtiyaç duyduğunuzda, ikisini de sistem genelindeki tek bir Python kurulumuna yüklemeye çalışmak er ya da geç bir çakışmayla sonuçlanır. Bir projeyi güncellediğinizde diğeri bozulur, ya da tam tersi.

Bu yazı, sanal ortamın bu çakışmayı nasıl önlediğini ve kurulumda neden neredeyse hiç atlanmaması gerektiğini gösteriyor.

Sanal ortam tam olarak neyi izole ediyor​


Python'ın resmî venv modülü belgesine göre bir sanal ortam, "mevcut bir Python kurulumunun üzerine kurulan ve varsayılan olarak temel ortamdaki paketlerden izole edilmiş" bağımsız bir pakettir. Yani sanal ortam, sisteminizdeki Python'u kopyalamıyor; onun üzerine, kendi başına yönetilen ayrı bir paket alanı kuruyor.

Belge sanal ortamın işlevini şöyle özetliyor: bir projeyi desteklemek için gereken belirli bir Python yorumlayıcısını ve kütüphaneleri barındırmak, ve bunları varsayılan olarak diğer sanal ortamlardan ve işletim sistemine kurulu kütüphanelerden izole tutmak. Yalnızca o ortamda açıkça kurduğunuz paketler, o ortamda görünür oluyor.

Sistem paketleriyle çakışma nasıl oluşur​


Sanal ortam olmadan yaptığınız her "pip install", işletim sisteminin kullandığı Python'a doğrudan yazar. Bazı işletim sistemleri kendi araçları için belirli paket sürümlerine bağımlı olduğundan, bu paketlerden birini elle güncellemek sistem araçlarını bozabilir; aynı şekilde iki farklı projenizin aynı kütüphanenin çakışan sürümlerini istemesi de tek bir ortamda bir arada duramaz.

Sanal ortam bu ihtimali baştan ortadan kaldırıyor: her proje kendi izole paket setine sahip olduğu için, bir projede yaptığınız kurulum veya güncelleme diğerini etkilemiyor, sistem Python'unu da etkilemiyor.

Bazı güncel işletim sistemi dağıtımları, sistem Python'una doğrudan pip ile paket kurmayı zaten kısıtlıyor ve kullanıcıyı bir sanal ortam oluşturmaya yönlendiren bir uyarı gösteriyor. Bu uyarı ilk karşılaşıldığında kafa karıştırıcı görünse de altında yatan neden aynı: sistemin kendi bütünlüğünü korumak için proje bağımlılıklarını ayrı tutmak istemesi.

Ortamı oluşturma ve etkinleştirme​


Belgede verilen temel komut, "python -m venv /path/to/new/virtual/environment" şeklinde; bu komut sistem Python'undan tamamen bağımsız, kendi site dizinine sahip yeni bir ortam oluşturuyor. Oluşturulan ortamın kullanılabilmesi için ayrıca etkinleştirilmesi gerekiyor; etkinleştirme betiği işletim sistemine göre değişse de amaç aynı: terminaldeki "python" ve "pip" komutlarını, sistem kurulumuna değil o sanal ortama yönlendirmek.

Tekrarlanabilir kurulum: requirements dosyasının rolü​


pip'in resmî kullanıcı rehberine göre requirements dosyaları, "pip freeze çıktısının, tekrarlanabilir kurulumlar elde etmek amacıyla saklanması" için kullanılıyor. Bu, bir sanal ortamda çalışan tam paket ve sürüm listesini dondurup, aynı listeyi başka bir makinede veya sunucuda birebir yeniden kurabilmeniz anlamına geliyor.

Aynı rehber, bu dosyaların ayrıca çakışan sürüm gereksinimlerini kontrol etmek ve alt bağımlılıklardaki sorunlu sürümleri geçersiz kılmak için de kullanıldığını belirtiyor. Sanal ortam izolasyonu sağlarken, requirements dosyası da o izole ortamın içeriğini tekrar üretilebilir kılıyor; ikisi birlikte "bende çalışıyordu ama sunucuda çalışmıyor" sorununun en yaygın nedenlerinden birini ortadan kaldırıyor.

Aynı ortamı başka bir makinede yeniden kurma ihtiyacını ayrıntılı işleyen Python projesinde aynı ortam nasıl yeniden kurulur yazımız, bu requirements dosyasının pratikte nasıl kullanıldığını adım adım gösteriyor.

Kurulumda hangi adım atlanmamalı​


  • Proje başına ayrı ortam: Her yeni projede önce bir sanal ortam oluşturmak, sonra paket kurmaya başlamak.
  • Ortamı etkinleştirmeyi unutmamak: Sanal ortam oluşturmak yetmez; terminalde etkinleştirilmediği sürece kurulumlar yine sistem Python'una gidebilir.
  • requirements dosyasını güncel tutmak: Yeni bir paket kurduğunuzda dosyayı da güncellemek, projeyi başka bir yerde yeniden kurulabilir tutar.
  • Sanal ortam klasörünü depoya eklememek: Bu klasör makineye özgüdür; paylaşılması gereken şey requirements dosyasıdır, klasörün kendisi değil.

Kodun kendisiyle ilgili başka bir çevresel sorunla karşılaşırsanız, örneğin dosyalarda Türkçe karakterlerin bozuk göründüğünü fark ederseniz, bu ayrı bir kaynak kodlama meselesi; Türkçe karakterler neden soru işaretine dönüşüyor, UTF-8 zincirini kontrol etmek yazımız bu sorunun nereden kaynaklandığını gösteriyor.

Ne zaman gerçekten fark yaratır​


Tek bir küçük betik yazıp bir kere çalıştıracaksanız sanal ortamın getirisi sınırlı kalabilir. Ama proje büyüdükçe, başka biriyle paylaşıldıkça veya bir sunucuya taşındıkça, izolasyonun eksikliği fark edilmeyen bir borç gibi birikir ve genelde en kötü zamanda, bir dağıtım sırasında ortaya çıkar. Programlama dillerinin proje geliştirme sürecindeki rolünü daha genel bir çerçevede ele alan programlama dilleri yazımıza da bu bağlamda göz atabilirsiniz.

Püf nokta' Alıntı:
Bir sanal ortamı etkinleştirmeden yaptığınız pip install, çoğu zaman yanlış yere kurulur.

Ortamı sürüm kontrolüne eklememek de aynı ölçüde önemli: sanal ortam klasörü makineye özgü yollar içerdiği için depoya girmemeli, paylaşılan şey ortamın kendisi değil requirements dosyası olmalı.

Özetle​


Sanal ortam, her projenin kendi paket setiyle sistem Python'undan ve diğer projelerden izole çalışmasını sağlıyor; bu izolasyon olmadan yapılan kurulumlar er geç birbirine karışıyor. Requirements dosyasıyla birleştiğinde, bu ortam başka bir makinede de aynı şekilde yeniden kurulabiliyor.

Siz projelerinizde sanal ortam kullanıyor musunuz, kullanmadığınız bir dönemde çakışma yaşadınız mı?

Güncelleme: 24 Ağustos 2026.



Dijital Dünyanıza Yön Veren Pusula
 

Ekli dosyalar

  • banner_06.jpg
    banner_06.jpg
    7.6 KB · Görüntüleme: 2
Geri
Üst