Merhabalar. Bugünkü yazımızda Python geliştirirken karşınıza mutlaka çıkacak olan sanal ortamları (virtual environment) ele alacağız. Nedir, ne işe yarar, nasıl oluşturulur ve neden mutlaka kullanmalısınız? Hep birlikte adım adım inceleyelim.

Sanal Ortam (Virtual Environment) Nedir?

Diyelim ki bilgisayarınızda iki tane Python projeniz var. Biri eski bir Django projesi ve eski sürüm paketler kullanıyor. Diğeri ise güncel bir FastAPI projesi. Eğer ikisini aynı global Python ortamında çalıştırırsanız, bir projede paket sürümünü güncellediğinizde diğeri bozulabilir. İşte sanal ortam bu sorunu çözer.

Sanal ortam, her projenizin kendi bağımlılıklarını (paketlerini) kendi içinde izole tutmasıdır. Her proje kendi klasöründe, kendi paketleriyle çalışır. Birbirlerine karışmazlar. Bunu aynı mutfakta her tarif için ayrı bir sepet tutmak olarak düşünebilirsiniz.

Neden Kullanmalısınız?

  • İzolasyon: Projeler arası paket çakışmasını engeller
  • Taşınabilirlik: requirements.txt dosyası ile projenizi başkasına verdiğinizde aynı ortamı kurabilir
  • Güvenlik: Sistem genelindeki Python kurulumunu bozmazsınız
  • Temizlik: Hangi projede hangi paketlerin olduğunu bilirsiniz

1. venv ile Sanal Ortam Oluşturma

Python 3.3’ten beri venv modülü Python ile birlikte gelir. Ekstra bir şey kurmanıza gerek yok. Terminalinizi açın ve proje klasörünüze gidin:

cd ~/projelerim/uygulama1

Ardından sanal ortamı oluşturun:

python3 -m venv venv

Bu komut bulunduğunuz dizinde venv adında bir klasör oluşturur. Bu klasörün içinde Python interpretörü, pip paket yöneticisi ve gerekli her şey bulunur. Klasörün adını istediğiniz gibi verebilirsiniz, ama venv veya .venv adı yaygın bir standarttır.

Eğer ki Python’unuzda birden fazla sürüm varsa, sürümü açıkça belirtebilirsiniz:

python3.12 -m venv venv

2. Sanal Ortamı Aktifleştirme

Sanal ortamı oluşturduktan sonra onu aktifleştirmeniz gerekir. Aktifleştirdiğinizde terminalinizin başında ortamın adı görünür:

GNU/Linux ve macOS için:

source venv/bin/activate

Windows için:

venv\Scripts\activate

Aktifleştirdiğinizde terminaliniz şu şekilde değişir:

(venv) kullanici@bilgisayar:~/projelerim/uygulama1$

Bu (venv) işareti şu an sanal ortamın içinde olduğunuzu gösterir. Artık burada pip install ile her ne kurarsanız sadece bu ortama kurulur, sistemin geri kalanını etkilemez.

3. Paket Kurulumu ve requirements.txt

Şimdi sanal ortamınız aktif. Paket kurabilirsiniz:

pip install requests fastapi

Kurduğunuz paketleri görmek için:

pip list

Çıktınız buna benzer olmalı:

Package            Version
------------------ ---------
certifi            2024.8.30
charset-normalizer 3.3.2
fastapi            0.115.0
idna               3.8
pip                24.2
requests           2.32.3
urllib3            2.2.2

Şimdi bu paketleri bir dosyaya kaydedelim. Bu dosya ile başka bir bilgisayarda veya başka bir geliştiricide aynı ortamı tek tıkla kurabilirsiniz:

pip freeze > requirements.txt

Bu komut requirements.txt adında bir dosya oluşturur. İçine bakarsanız koyduğunuz paketleri görebilirsiniz:

cat requirements.txt

Çıktı:

certifi==2024.8.30
charset-normalizer==3.3.2
fastapi==0.115.0
idna==3.8
pip==24.2
requests==2.32.3
urllib3==2.2.2

Başka bir ortamda bu paketleri kurmak için:

pip install -r requirements.txt

4. Sanal Ortamdan Çıkış

İşiniz bittiğinde sanal ortamdan çıkmak için basitçe:

deactivate

Yazmanız yeterli. Terminalinizdeki (venv) işareti kaybolur ve sistemin normal Python ortamına dönersiniz.

5. .gitignore ile venv’yi Git’ten Uzak Tutma

Eğer projeniz Git kullanıyorsa, venv klasörünü Git’e göndermemeniz gerekir. Çünkü bu klasör sizin bilgisayarınıza özel ve oldukça büyüktür. Projenizin kök dizinindeki .gitignore dosyasına şunu ekleyin:

venv/
__pycache__/
*.pyc

Bu şekilde venv klasörü Git tarafından görmezden gelinecektir. Başka biri projenizi indirdiğinde kendi sanal ortamını oluşturup pip install -r requirements.txt ile bağımlılıkları kurabilir.

6. Alternatif: uv ile Daha Hızlı Sanal Ortamlar

2024’ten beri Python dünyasında adından sıkça bahsedilen bir araç var: uv. Astral ekibi tarafından Rust dilinde geliştirilen uv, pip ve venv’in yerine kullanabileceğiniz çok daha hızlı bir araç. Aynı anda hem paket yöneticisi hem de sanal ortam yöneticisi olarak çalışıyor.

Kurulumu basit:

curl -LsSf https://astral.sh/uv/install.sh | sh

Ardından sanal ortam oluşturmak için:

uv venv

Paket kurmak için:

uv pip install requests fastapi

uv’nin en büyük avantajı hızı. pip’ten 10-100 kat daha hızlı paket kurulumu yapıyor. Ayrıca pyenv yerine Python sürümlerini bile yönetebilir:

uv python install 3.12

Eğer modern bir Python projesine başlıyorsanız uv’yi denemenizi tavsiye ederim. Yine de klasik venv hala tamamen yeterli ve tüm Python kurulumlarında varsayılan olarak gelir.

Yaygın Hatalar ve Çözümleri

Hata: “python3: command not found”

Bazı GNU/Linux dağıtımlarında Python python olarak kuruludur. python -m venv venv deneyin veya python3 paketini kurun:

sudo apt install python3 python3-venv

Hata: “Ensure pip is up-to-date” uyarısı

Sanal ortamı oluştururken pip’in güncel olmadığına dair uyarı alırsanız:

pip install --upgrade pip

Hata: Sanal ortam aktif ama pip hala global

Eğer which pip yazdığınızda venv içindeki pip’i görmüyorsanız, sanal ortamı doğru aktifleştirmemiş olabilirsiniz. Önce deactivate ile çıkın, sonra tekrar source venv/bin/activate ile girin.

Sonuç

Sanal ortamlar Python geliştirmenin temel parçalarından biridir. Her projeniz için ayrı bir venv oluşturmak, başınıza gelebilecek pek çok bağımlılık sorununu en baştan engeller. İster klasik venv ile isterseniz modern uv ile çalışın, önemli olan her projeyi izole tutmak.

Bir sonraki yazımızda FastAPI ile ilk REST API’nizi nasıl oluşturacağınızı anlatacağım. Okuduğunuz için teşekkür ederim!