Menu

Python Sanal Ortamları: venv, Aktivasyon ve requirements.txt

Sanal ortam nedir, neden her gerçek Python projesinin ihtiyacı vardır ve yerleşik venv modülüyle nasıl oluşturulur ve yönetilir.

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.2 istiyor. B projesi django==5.0 istiyor. 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 ve which python (macOS/Linux) ya da where 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.toml ile 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 .venv ile birini oluştur, aktif et, sonra serbestçe pip install.
  • Bağımlılıkları pip freeze > requirements.txt ile 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.

Coddy ile kodlamayı öğren

BAŞLA