Stuart Ellis’in Python geliştirme için modern iyi uygulamaları
(stuartellis.name)Python Geliştirme için Modern İyi Uygulamalar
Stuart Ellis’in Python geliştirme için modern iyi uygulamaları Python geliştirirken dikkate alınması gereken önemli noktaları ele alıyor. Başlıca içerikler şöyle:
Python kullanımı
- İşletim sistemine gömülü Python’u kullanmaktan kaçının: İşletim sistemiyle gelen Python eski bir sürüm olabilir.
- Birden fazla sürümü destekleyen araçlarla Python kurun: pyenv veya mise gibi araçları kullanın.
- Python’un güncel sürümünü kullanın: Güvenlik yamaları ve performans iyileştirmeleri için en yeni kararlı sürümü tercih edin.
- Geliştirici uygulamalarını çalıştırmak için pipx kullanın: pipx ile uygulamaları yalıtılmış ortamlarda çalıştırın.
- Proje araçları kullanın: PDM, Hatch, Mise, Rye öneriliyor.
Python projeleri geliştirme
- Kod biçimlendirme: Ruff kullanın.
- Kod linting: Ruff öneriliyor.
- pytest ile test: İlgili eklentileri (pytest-randomly, pytest-cov) kullanın.
- Paketleme: wheel paketi kullanın; gerekirse container imajları veya PyInstaller kullanın.
Dil özellikleri
- Type hinting kullanın: PEP 484, PEP 526.
- String biçimlendirme için f-string kullanın: PEP 498.
- Zaman dilimi farkında datetime nesneleri kullanın: PEP 615.
Uygulama tasarımı
print()yerine logging kullanın.- Yapılandırma için TOML biçimini kullanın: PEP 680.
- Asenkron I/O’yu yalnızca gerektiğinde kullanın.
Kütüphaneler
- Komut satırı girdilerini argparse ile işleyin.
- Dosya ve dizin yollarını pathlib ile yönetin.
os.listdir()yerine daha hızlı ve verimli olanos.scandir()kullanın: PEP 471.- Harici komutları çalıştırmak için subprocess kullanın: PEP 324.
- Web istemcisi olarak requests yerine httpx kullanın.
Proje için iyi uygulamalar
pyproject.tomldosyasını kullanın: PEP 517, PEP 518, PEP 621, PEP 660.- src düzenini kullanın: src düzeni ile düz düzenin karşılaştırması.
- Geliştirme için sanal ortamlar kullanın: venv, PDM, Hatch, Mise öneriliyor.
- Paket kurulumunda gereksinim dosyaları kullanın: pip-tools üzerinden pip-compile veya uv kullanın.
Daha fazla ayrıntı için yazının tamamına bakabilirsiniz.
.
.
Hacker News’te Python Modern Practices tartışmasının özeti
Python Modern Practices hakkındaki Hacker News tartışmasında çeşitli araçlar ve yöntemler üzerine kullanıcı görüşleri paylaşıldı:
- UV kullanımı öneriliyor: UV hızlı ve kullanımı kolay; sorun çıktığında da destek iyi. by screye
- Rye’dan söz ediliyor: Rye, Python interpreter pinning ve indirme desteği sunuyor; uv ile entegrasyonu planlanıyor. by rat87
- Mevcut araçların sadeliği vurgulanıyor: Mamba ortamı ve temel pip yeterli, araç değiştirme ihtiyacı hissedilmiyor. by helsinki
- Temel araçlar tercih ediliyor: pip, venv ve virtualenvwrapper ile çoğu sorun çözülebiliyor. by throwadobe
- Pipenv kullanımı savunuluyor: Pipenv eksiksiz bir çözüm olarak kullanıldı; neden daha yaygın olmadığını anlamadığını söylüyor. by routerl
- Poetry’nin sorunları: Poetry, Git commit sürüm tanımlayıcıları ekleyememek gibi sorunlar nedeniyle hayal kırıklığı yarattı. by alisonatwork
- Conda ve Mamba: Conda bağımlılık yönetiminde çok daha güçlü, Mamba ise daha hızlı. by wanderingmind
- Packaging sorunu: Python paketleme sorununun büyük ölçüde sosyal nedenleri var ve bu her zaman bir sorun olacak. by jampekka
- Pyenv için alternatif önerisi: Mise, Pyenv’den daha hızlı ve Node projelerini de destekliyor. by odie5533
- Pydantic modelleri ve dataclass’lar: Pydantic modelleri güçlü doğrulama sunuyor ama yavaş; dataclass’lar ise hafif ve verimli. by martinky24
Ayrıntılar için Hacker News tartışmasına göz atabilirsiniz.
5 yorum
Kütüphanelerin hafifletilmesine dair bir içerik yok gibi görünüyor.
miniconda3'ün sanal env'sini kullanıp kullanılmayan lib'leri kaldırarak portable şekilde dağıtmanın, yarn gibi dağıtık işleme sistemlerinde daha iyi performansı garanti ettiğini gördüm.
Neden pip-tools veya uv kullanmalıyız? Modern ya da iyi olduğuna dair ortada hiçbir dayanak yok.
pip bağımlılık belirticilerine (dependency specifier) neden hash eklenmesi gerektiğine dair, mevcut pip davranışında build sürümünün belirtilememesi sorunu var gibi görünüyor. Böyle bir bağlam olmadan sadece yönergeleri sıralayan kılavuzlar pek ikna edici görünmüyor.
Genelde hangisini kullanıyorsunuz??
Geçmişte yalnızca
pip freezeile çalışıyordum; Windows/Linux destekli kütüphaneleri seçerek çalıştım ve yama sürümünün değişmesinden kaynaklanan bir sorunla da henüz karşılaşmadım. Buna rağmen artık sorunun ne olduğunu öğrendiğim için gerekliliğini anlıyorum; ancakpip-toolsveyauvbiraz daha olgunlaştığında kullanmayı değerlendirmeyi planlıyorum.