venv ile Python sanal ortamı: kurulum, kullanım ve proje düzeni
Beceri rehberi

venv ile Python sanal ortamı: kurulum, kullanım ve proje düzeni

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Python projeleri için venv ile sanal ortam kurma, etkinleştirme, paket kurma, requirements.txt ile paylaşma ve sık karşılaşılan hataları adım adım öğrenin.

Sanal ortam nedir, neden gerekir?

Python paketleri varsayılan olarak sistem genelinde kurulur. Bu, bir süre sonra çakışmaya yol açar: bir projeniz bir kütüphanenin eski sürümünü isterken diğeri yenisini ister, ikisini aynı yere kuramazsınız. Üstelik sistem Python'ına eklenen paketler işletim sisteminin kendi araçlarını bozabilir.

Sanal ortam (virtual environment) bu sorunu çözer. Her proje için ayrı bir klasör oluşturur; bu klasörün içinde projeye ait Python yorumlayıcısı ve paketler yaşar. Bir projede kurduğunuz paket diğerini etkilemez, sistem kurulumuna dokunulmaz ve ortamı silmek tek bir klasörü silmek kadar kolaydır. Python'ın standart kütüphanesiyle gelen venv modülü bu işi ek bir kurulum gerektirmeden yapar; virtualenv adlı bağımsız bir araç da aynı amaca hizmet eder ve aramalarda sık geçer.

Sanal ortamı kurmak

Kurulum tek komuttur ve proje klasörünün içinde çalıştırılır. Terminali açıp proje dizinine geçin, ardından Python'u -m venv seçeneğiyle ve ortamın adıyla çağırın: python -m venv .venv. Sistemlerin bazılarında python komutu yerine sürüm numarasını içeren bir ad kullanılır; komut bulunamıyorsa kurulu Python'un adını kontrol edin.

Ortam adı olarak .venv ya da venv yaygın olarak kullanılır. Nokta ile başlayan ad, klasörün birçok araçta gizli sayılmasını sağlar ve çoğu editör bu adı tanır. Komut tamamlandığında klasörün içinde yorumlayıcının kopyası ya da bağlantısı, etkinleştirme betikleri ve paketlerin kurulacağı alan oluşur.

Bu klasörün içine elle dosya koymayın ve projenizin kaynak kodunu orada tutmayın. Ortam, silinip yeniden oluşturulabilen geçici bir yapı olarak düşünülmelidir.

Etkinleştirmek ve devre dışı bırakmak

Ortam oluşturulduktan sonra terminal oturumunuzda etkinleştirilmesi gerekir. macOS ve Linux'ta source .venv/bin/activate, Windows komut isteminde .venv\Scripts\activate çalıştırılır; PowerShell'de aynı klasördeki PowerShell betiği kullanılır ve çalıştırma ilkesi nedeniyle izin sorabilir.

Etkinleştirme başarılı olduğunda komut satırının başında ortamın adı parantez içinde görünür. Bu andan itibaren python ve pip komutları ortamın içindeki sürümleri çalıştırır. Çalışmanız bitince deactivate komutuyla ortamdan çıkılır; ortam silinmez, yalnızca terminal eski haline döner.

Etkinleştirmeyi atlayıp ortamdaki yorumlayıcıyı doğrudan tam yoluyla çağırmak da mümkündür. Otomasyon betiklerinde ve zamanlanmış görevlerde etkileşimli etkinleştirme yapılamadığı için bu yöntem tercih edilir.

Paket kurmak ve requirements.txt ile paylaşmak

Ortam etkinken pip install paket_adı komutu, paketi yalnızca bu ortama kurar. Kurduğunuz paketlerin listesini pip freeze komutuyla görebilir, çıktıyı bir dosyaya yönlendirerek requirements.txt dosyasını oluşturabilirsiniz. Bu dosya projenizin bağımlılık kaydıdır.

Başka bir bilgisayarda ya da bir meslektaşınızda aynı ortamı kurmak için sıra şöyledir: • Projeyi alın ve proje klasörüne geçin • Yeni bir sanal ortam oluşturup etkinleştirin • pip install -r requirements.txt komutuyla bağımlılıkları kurun

Bu akış, aynı kodun herkes için aynı paket sürümleriyle çalışmasını sağlar. Sürüm sabitleme (pin) bu dosyanın en değerli yanıdır: çalışan bir betiğin ay sonunda bir kütüphane güncellemesiyle bozulmasının önüne geçer. Ancak pip freeze çıktısı ortamdaki her şeyi, yani paketlerin bağımlı paketlerini de içerir. Büyük projelerde doğrudan kullandığınız paketleri ayrı, tüm kilit listesini ayrı tutmak daha okunur bir düzen sağlar.

Proje düzeni ve sürüm kontrolü

Sanal ortam klasörü sürüm kontrol sistemine (örneğin Git) eklenmez. İçindeki dosyalar makineye ve işletim sistemine özgüdür, boyutu büyüktür ve requirements.txt ile yeniden üretilebilir. Bu yüzden .gitignore dosyasına ortam klasörünün adını ekleyin.

İyi bir proje düzeninde ortam klasörü, kaynak kodunuzla aynı seviyede, ama onun dışında durur. Kod editörünüzü (VS Code, PyCharm gibi) bu ortamın yorumlayıcısına yönlendirdiğinizde otomatik tamamlama ve hata denetimi doğru paket sürümlerine göre çalışır. Editörün yorumlayıcı seçimi çoğu zaman sorunların sessiz kaynağıdır: terminalde çalışan komut editörde kütüphaneyi bulamıyorsa, editör başka bir yorumlayıcıya bakıyordur.

Bir projeyi farklı Python sürümleriyle denemeniz gerekirse, her sürüm için ayrı ortam oluşturmak yeterlidir. Ortam, oluşturulduğu Python sürümünü kullanır.

Örnek senaryo: farklı bağımlılıklı otomasyon betikleri

Örneğin bir analist hem eski bir raporlama betiğini bakımda tutuyor hem de yeni bir veri temizleme betiği yazıyor. Eski betik bir Excel kütüphanesinin eski bir sürümüne bağımlı, yenisi ise o kütüphanenin güncel sürümündeki bir özelliğe ihtiyaç duyuyor.

Sanal ortam olmadan bunlar aynı sistemde çakışır: biri güncellenince diğeri bozulur. Analist her proje klasörü için ayrı ortam oluşturur. Eski betiğin ortamında eski sürümü, yeni betiğin ortamında güncel sürümü kurar. Her klasörde requirements.txt tutar. Yıl sonunda yeni bir bilgisayara geçildiğinde ortamlar birkaç komutla yeniden kurulur ve betikler aynı sonuçları verir.

Bu düzenin ek faydası temizliktir: proje bittiğinde ortam klasörünü silmek, sistemde o projeden hiçbir kalıntı bırakmaz.

Sık yapılan hatalar ve çözümleri

En sık hata, ortamı etkinleştirmeden pip install çalıştırıp paketi sisteme kurmaktır. Komutu yazmadan önce komut satırı başında ortam adını görüp görmediğinize bakın. Bir diğer hata, ortamı oluşturduktan sonra proje klasörünü başka bir yere taşımaktır: ortam içindeki betikler mutlak yol tuttuğu için taşınan ortam bozulur. Böyle bir durumda ortamı silip requirements.txt ile yeniden kurmak en temiz yoldur.

Diğer tuzaklar: • Ortamı Git'e eklemek ve depoyu şişirmek • requirements.txt dosyasını güncellemeyi unutup yeni kurulan paketi kayıt dışı bırakmak • Windows'ta betik çalıştırma izni nedeniyle etkinleştirmenin sessizce başarısız olması • Sistem Python'una pip ile genel kurulum yapıp işletim sisteminin kendi araçlarını bozmak • Editörün yanlış yorumlayıcıyı kullanması yüzünden paket varken bulunamadı hatası almak

Mindset programlarında bu beceriyi nerede çalışırsınız?

Python Otomasyon ile Verimlilik programının ilk modülü Python Otomasyon Ortamı ve Temel Beceriler başlığını taşır; sonraki modüller dosya yönetimi, rapor üretimi, e-posta, API entegrasyonu ve zamanlanmış görevler gibi paket kullanımı gerektiren otomasyon konularına gider. Python ile Programlama Eğitimi ise Modüller ve Paketler başlığıyla paket kavramını işler. Otomasyon betiklerini birden çok kişiyle paylaşacak ekipler için sanal ortam ve bağımlılık dosyası düzeni, bu programların uygulamalı kısmına doğrudan karşılık gelir.

Betikleri yalnızca kendi makinesinde çalıştıran bireyler için de aynı düzen geçerlidir; ortam ve bağımlılık dosyası, işi başka bir bilgisayara ya da bir meslektaşa devrederken kaybolmayan bilgidir.

İlgili Mindset programı

Python ile Programlama Eğitimi

Sık sorulanlar

Sık sorulan sorular

venv ile virtualenv arasındaki fark nedir?

venv, Python'un standart kütüphanesiyle gelir ve ek kurulum gerektirmez. virtualenv ise ayrı kurulan, daha çok seçenek sunan bağımsız bir araçtır. Çoğu kullanım için venv yeterlidir. Hepsi aynı fikre dayanır: proje başına yalıtılmış bir paket alanı.

Sanal ortamı silmek projeme zarar verir mi?

Hayır. Ortam klasörü yalnızca yorumlayıcı ve kurulu paketleri içerir, kaynak kodunuzu içermez. requirements.txt dosyanız güncelse klasörü silip yeniden oluşturmak ve paketleri tekrar kurmak yeterlidir. Bu yüzden ortam, geçici ve yeniden üretilebilir kabul edilir.

Her proje için ayrı sanal ortam şart mı?

Küçük ve tek seferlik denemeler için şart değildir; ancak bağımlılıkları farklı birden çok proje yürütüyorsanız ayrı ortam kullanmak çakışmaları önler. Alışkanlık olarak her projeye ortam kurmak, sonradan hata ayıklamaktan çok daha az zaman alır.

Etkinleştirdiğimi nasıl anlarım?

Komut satırının başında ortamın adı parantez içinde görünür. Doğrulamak için hangi yorumlayıcının çalıştığına da bakabilirsiniz: komutun yolu ortam klasörünün içini gösteriyorsa ortam etkindir. Ad görünmüyorsa etkinleştirme betiği çalışmamış ya da terminal oturumu yenilenmiş demektir.

requirements.txt dosyasını nasıl güncel tutarım?

Yeni paket kurduktan ya da sürüm güncelledikten sonra pip freeze çıktısını dosyaya yeniden yazın. Ekip çalışmasında bu dosyayı kod değişikliğiyle birlikte kaydetmek alışkanlık hale getirilmelidir; aksi halde başka bir bilgisayarda kurulum eksik paketle başarısız olur.

Python Sanal Ortam (venv) Nasıl Kurulur ve Kullanılır