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.txtdosyası 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!