Sanal Ortamların Çözdüğü Sorun
Python'u kur, pip install requests çalıştır ve paket tek bir global yere iner. Tek bir proje için sorunsuz çalışır. Üçüncü projeye geldiğinde canın yanmaya başlar:
- A projesi
django==3.2istiyor. B projesidjango==5.0istiyor. Yalnızca biri sürümünü genele kurdurabilir. - Yeni bir kütüphaneyi denemek istiyorsun ama makinendeki her projeyi kirletmesini istemiyorsun.
- Takım arkadaşın repo'nu klonluyor ve gerçekte hangi paketin hangi sürümüne bağlı olduğuna dair hiçbir fikri yok.
Sanal ortam bunun çözümüdür. Bir Python yorumlayıcısı ve kendi kütüphane kurulum dizini tutan, kendi kendine yeten bir klasördür. Ortam aktif olduğunda terminaldeki python ve pip, sistem genelindeki Python yerine o klasörün içini işaret eder. Oraya kurulan paketler orada kalır.
venv ile Birini Oluşturmak
venv, Python 3 ile birlikte gelir — kurulum gerektirmez. Proje dizinin içinden:
python3 -m venv .venv
Bu, kodunun yanına bir .venv/ klasörü oluşturur. .venv ismi neredeyse evrensel bir gelenektir; baştaki nokta onu çoğu dizin listelemesinden uzak tutar ve VS Code gibi editörler onu otomatik algılar.
Komut bittikten sonra klasör, tam bir Python kurulumu (onlarca megabayt, normaldir) ve kendi pip'ini içerir.
Ortamı Aktif Etmek
Aktif etmek, shell'inin PATH'ini yeniden yazar; böylece python ve pip, .venv/ içindekilere çözülür. Komut platformuna göre değişir:
# macOS / Linux
source .venv/bin/activate
# Windows (Command Prompt)
.venv\Scripts\activate.bat
# Windows (PowerShell)
.venv\Scripts\Activate.ps1
Ortam aktifken prompt'un başına (.venv) öneki gelir — görsel bir hatırlatma. Şimdi çalıştırdığın her pip install yalnızca bu projeyi etkiler.
Günün sonunda deactivate önceki duruma döndürür:
deactivate
Terminali kapatmadan önce devre dışı bırakmana gerek yok — shell'den çıkmak aynı şey.
Paket Kurmak
Ortam aktifken ihtiyacın olanı kur:
pip install requests
pip install "pandas>=2.0"
pip install --upgrade requests
Kurulu olanı pip list ile kontrol et. Bir şeyi pip uninstall requests ile kaldır.
Kurulan paketler .venv/lib/pythonX.Y/site-packages/ altında yaşar. Onları asla elle düzenlemezsin — dizini pip yönetir.
requirements.txt ile Bağımlılıkları Sabitlemek
Projenin, kullandığın sürümleri başkaları da kurabildiği sürece yeniden üretilebilirdir. Bunu yakalamanın en basit yolu requirements.txt'tir:
pip freeze > requirements.txt
pip freeze, kurulu her paketi kesin sürümüyle yazdırır. Dosyayı git'e commit et.
Bir ortak çalışan (ya da yeni bir makinedeki gelecekteki sen) repo'yu klonladığında:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Üç komut ve ortamı seninle eşleşir.
Yaygın Bir Proje Kurulumu
Baştan sona tüm akış:
# Proje klasörünü oluştur
mkdir my_tool && cd my_tool
# Venv'i oluştur ve aktif et
python3 -m venv .venv
source .venv/bin/activate
# Bağımlılıkları kur
pip install requests rich
# Onları kaydet
pip freeze > requirements.txt
# Kodun üzerinde çalış...
echo "import requests; print(requests.__version__)" > main.py
python main.py
# İşin bittiğinde
deactivate
.venv'i .gitignore'una Ekle
.venv/ klasörünü asla commit'leme. Platforma özeldir ve requirements.txt'ten yeniden üretilebilir:
# .gitignore
.venv/
__pycache__/
*.pyc
Onu commit'lemek repo'yu şişirir, başka makinelerde kırılır ve yorumlayıcının sahip olduğu işletim sistemine özel ikili dosyaları sızdırır.
Hangi Python Sürümü?
Varsayılan olarak python3 -m venv .venv, shell'inin çözdüğü python3'ü kullanır. Birden fazla Python kuruluysa (diyelim 3.12 ve 3.13), hangisini istediğin konusunda açık ol:
python3.13 -m venv .venv
Venv oluştuktan sonra yorumlayıcısı sabitlenir — aktif venv içindeki python, sistem Python'un değişse bile her zaman o belirli sürümü kullanır.
İşler Ters Gittiğinde
Birkaç yaygın belirti ve çözüm:
pip installçalışıyor ama import'larım başarısız. Yanlış Python'a kurulum yaptın.pip install'tan önce venv'i aktif et vewhich python(macOS/Linux) ya dawhere python(Windows) ile yeniden kontrol et.- Aktivasyondan sonra "ModuleNotFoundError". Venv belirli kütüphaneler olmadan oluşturuldu ya da paket farklı bir venv'e kuruldu.
pip list, o anki venv'de gerçekten neyin olduğunu gösterir. - Windows'ta aktivasyon script'i bulunamıyor. PowerShell imzasız script'leri engelliyor olabilir. Yerel script'lere izin vermek için bir kez
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedçalıştır. - "No module named venv". Bazı Linux dağıtımlarında venv ayrı bir pakettir. Debian/Ubuntu'da
sudo apt install python3-venv.
venv'in Ötesinde: Poetry, uv, pipenv
venv + pip + requirements.txt ile rahat ettiğinde, aynı fikirleri daha iyi ergonomiyle saran araçlara denk geleceksin:
- Poetry — venv'leri, bağımlılıkları ve paketlemeyi tek bir
pyproject.tomlile yönetir. - uv — çok hızlı,
pip'in yerine doğrudan geçen bir araç; venv'leri de işler. - pipenv — "Pipfile + Pipfile.lock" deseni popülerleştiren daha eski bir araç.
Hepsi iyi. Öğrenmek için hiçbiri zorunlu değil. Önce düz venv akışıyla rahat et; gerisi optimizasyon.
Aklında Kalacaklar
- Her gerçek Python projesi kendi sanal ortamını alır.
python3 -m venv .venvile birini oluştur, aktif et, sonra serbestçepip install.- Bağımlılıkları
pip freeze > requirements.txtile sabitle ve o dosyayı commit'le. .venv/klasörünün kendisini asla commit'leme.- Import'lar terslik yaptığında önce hangi Python'un aktif olduğunu kontrol et.
Sırada: __main__ Kalıbı
Bir proje kurulduğunda ve paketler yüklendiğinde, son bir deyim bu bölümü kapatıyor — if __name__ == "__main__" koruması. Script olarak çalıştırılmak üzere yazılmış neredeyse her Python dosyasında vardır ve bir sonraki sayfanın konusudur.
Sıkça Sorulan Sorular
Python sanal ortamı nedir?
Sanal ortam, kendi Python yorumlayıcısı ve kurulu kütüphaneler için kendi site-packages dizini olan, kendi kendine yeten bir klasördür. Birini aktif ettiğinde python ve pip, sistem Python'u yerine o klasörün içini işaret eder; böylece kurduğun paketler projeler arası sızmaz.
Python'da sanal ortamı nasıl oluştururum?
Proje klasörünün içinde python3 -m venv .venv komutunu çalıştır. Bu, taze bir Python kurulumu olan bir .venv dizini oluşturur. macOS/Linux'ta source .venv/bin/activate veya Windows'ta .venv\Scripts\activate ile aktif et. Artık pip install yalnızca bu projeyi etkiler.
Her Python projesi sanal ortam kullanmalı mı?
Tek seferlik bir script'in ötesindeki her şey için evet. Projeler arası sürüm çakışmalarını önler, bağımlılıkları requirements.txt'te (veya pyproject.toml'da) açık hale getirir ve ortak çalışanların kurulumunu yeniden oluşturmasına izin verir. Bir dakikalık kurulum, sonradan saatlerce ModuleNotFoundError ile boğuşmaktan kurtarır.
venv ile virtualenv arasındaki fark nedir?
venv, Python 3'e yerleşiktir — kurulum gerektirmez. virtualenv ise ondan önce gelen üçüncü parti bir araçtır; birkaç ekstra özelliği vardır (daha hızlı oluşturma, eski Python'lara destek). Çoğu modern proje için venv doğru varsayılandır; yalnızca belirli bir ihtiyacın varsa virtualenv'e uzan.