Pyright Rehberi: Python Kodu için Hızlı Statik Tür Denetimi
Python'da statik tür denetimi için Pyright'ı nasıl kurup kullanacağınızı öğrenin. Bu rehber, yapılandırma, IDE entegrasyonu, sorun giderme ve Pyright'ı Mypy'ye ne zaman tercih edeceğinizi kapsar.
Tür ipuçları, Python kodunu anlamayı ve bakımını kolaylaştırır. Ama işin püf noktası şu: İpuçları tek başına hataları yakalamaz. Deklare ettiğiniz türlere kodunuzun gerçekten uyup uymadığını doğrulamak için bir tür denetleyiciye ihtiyacınız vardır.
Üretimde hem Mypy hem de Pyright kullandım. Pyright'ın hız avantajı özellikle geliştirme sırasında belirgindir. Tür hataları, kaydettikten sonra değil, siz yazarken görünür. Büyük kod tabanlarında bu daha hızlı geri bildirim döngüsü gerçekten fark yaratır.
Bu eğitim, Pyright'ı etkili biçimde kullanmaya başlamak için gereken her şeyi kapsar. Nasıl kuracağınızı, projeniz için nasıl yapılandıracağınızı ve VS Code ile nasıl entegre edeceğinizi göstereceğim. Ayrıca Pyright ile Mypy arasındaki farkları da irdeleyeceğim.
Pyright Nedir?
Pyright, Microsoft tarafından geliştirilen bir Python statik tür denetleyicisidir. Kodunuzu okur, tür açıklamalarını analiz eder ve türler eşleşmediğinde hataları raporlar. Kod çalıştığında hataları yakalayan çalışma zamanı kontrollerinin aksine, statik analiz hataları bir şey çalıştırmadan önce yakalar.
Çoğu Python aracı Python ile yazılmışken, Pyright TypeScript ile yazılmıştır ve Node.js üzerinde çalışır. Bir Python aracı için tuhaf bir seçim, değil mi? Ama Pyright'ı bu kadar hızlı yapan da budur. V8 JavaScript motoru, CPython'dan çok daha hızlı çalışır.
Pyright ile iki şekilde karşılaşırsınız. Birleştirmelerden önce tür hatalarını yakalamak için CI/CD hatlarında komut satırı aracı olarak çalıştırabilirsiniz. Ya da farkında olmadan zaten kullanıyor olabilirsiniz. VS Code için Microsoft'un Python uzantısı olan Pylance'ı çalıştırır. Tür hatalarının altındaki kırmızı dalgalı çizgiler mi? Bu, perde arkasında çalışan Pyright'tır.
Araç, Python standart kitaplığı ve yaygın paketler için paketlenmiş tür kütükleriyle gelir. os,json veyatyping kullanan kodu denetlemek için ekstra bir şey kurmanız gerekmez. Üçüncü taraf paketler için Pyright, typeshed'den topluluk tarafından bakım yapılan kütükleri veya ayrıca kurduğunuz paket özelindeki kütükleri kullanır.
Pyright Nasıl Kurulur
Şimdi Pyright'ı sisteminizde çalıştıralım. İki kurulum seçeneğiniz var: npm (yerel yaklaşım) veya pip (Python sarmalayıcı).
npm ile Pyright kurulumu
Önerilen kurulum, Pyright Node.js üzerinde çalıştığı için npm kullanır. Node.js sürümünüzün 14.0.0 veya üzeri olması gerekir.
# Global installationnpminstall-g pyright
# Run without installing globally
npx pyright
# Local project installationnpminstall --save-dev pyrightAltyapı:
Hızlı kontroller için global, sürümü sabitlemek istediğim projeler için yerel kurulum kullanırım. npxyaklaşımı, global paketlerinize ekleme yapmadan tek seferlik işler için kullanışlıdır.
Python sarmalayıcı ile Pyright kurulumu
Ekibiniz tamamen Python ile çalışıyor ve araç zincirinde Node.js istemiyorsa bir PyPI sarmalayıcısı mevcut:
# Standard installation
pip install pyright
# Recommended: includes Node.js automatically
pip install pyright[nodejs]Altyapı:
Sarmalayıcı, sisteminizde Node.js olup olmadığını denetler. Eksikse sarmalayıcı otomatik olarak bağımsız bir sürüm indirir. [nodejs] eklentisi, varsayılandan daha güvenilir bir indirme yöntemi kullanır.
Aklınızda bulunsun, bazı ödünler vardır. İlk çalıştırmada bağımlılıklar indirilirken daha uzun sürer. Ağ erişimi kısıtlı CI ortamlarında başarısız olabilir. Ayrıca PyPI sürümü bazen npm sürümlerinin birkaç gün gerisinden gelir.
Çoğu Python ekibi için sarmalayıcı gayet iyi çalışır. Ancak sorun yaşarsanız npm kurulumuna geri dönün. Daha güvenilirdir.
Bir Python Projesinde Pyright Çalıştırma
Kurulum tamamlandıktan sonra Pyright'ı çalıştırmak basittir. Proje dizininize gidin ve şunu çalıştırın:
Hepsi bu. Pyright Python dosyalarını tarar, analiz eder ve bulduğu tür hatalarını raporlar. Karmaşık bir kurulum gerekmez.
Pyright varsayılan olarak neleri denetler
Pyright neye bakar? Herhangi bir yapılandırma olmadan birkaç denetim gerçekleştirir. Gerçek kullanım ile eşleşen tür açıklamalarını doğrular. Tanımsız değişkenleri ve erişilemeyen kodu yakalar. İçe aktarmaları doğru şekilde doğrular. Bir tamsayı beklenirken bir dizge geçirilmesi gibi bariz tür uyumsuzluklarını işaretler.
Hataları olan bir projeden örnek çıktı:
/src/utils.py:12:15 - error: Argument of type "str" cannot be assigned
to parameter "count" of type "int" in function "process_items"
"str" is not assignable to "int" (reportArgumentType)
/src/main.py:45:9 - error: "user" is possibly unbound (reportPossiblyUnbound)
2 errors, 0 warnings, 0 informationsAltyapı:
Her hata dosya yolunu, satır ve sütunu ve bir açıklamayı gösterir. Parantez içindeki kural adı (ör. reportArgumentType) hatayı hangi denetimin tetiklediğini tam olarak söyler. Bu, belirli kuralları bastırmak istediğinizde önemlidir. Bunu birazdan ele alacağız.
Çıkış kodlarını anlama
Pyright, sonuça bağlı olarak farklı çıkış kodları döndürür:
Çıkış Kodu
Anlamı
0
Hata bulunmadı
1
Tür hataları bulundu
2
Fatal hata (çökme, bellek yetersiz)
3
Yapılandırma dosyası hatası
4
Geçersiz komut satırı argümanları
CI hatlarında genellikle 1 çıkış kodunda derlemenin başarısız olmasını istersiniz. 2-4 kodları, aracın kendisiyle ilgili bir sorun olduğunu, kodunuzla değil, gösterir.
Pyright'ı Yapılandırma
Pyright kutudan çıktığı gibi çalışsa da gerçek projeler özelleştirme ister. Hangi dosyaların denetleneceğini, hedef Python sürümünü ve analizin ne kadar sıkı olacağını belirtmek istersiniz. Temel yapılandırma seçeneklerine bakalım.
Tür denetim modları
Pyright dört sıkılık düzeyi sunar. Seçeceğiniz mod, kaç kuralın etkinleşeceğini belirler.
Mod
Davranış
off
Tür denetimi yok; yalnızca sözdizimi hataları raporlanır
Hangi modu seçmelisiniz? Yeni projeler için standard mod ile başlayın. Sizi hatalara boğmadan gerçek hataları yakalar. Eski kodla mı çalışıyorsunuz? Basic mod, yazım kurallarını kademeli benimsediğinizde daha iyi çalışır. Strict modu ise maksimum güvenlik istediğiniz kütüphaneler ve kritik altyapı için saklayın.
Uyarı: standard'dan strict'e geçiş ciddi bir sıçramadır. Strict mod, tüm işlev parametreleri ve dönüş değerleri için tür açıklamalarını zorunlu kılmak da dahil yaklaşık 30 ek kural etkinleştirir. Geçiş yaptığınızda raporlanan hatalarda 10 kat artış bekleyin. Bunu zor yoldan öğrendim.
Strict mod eksiksiz tür açıklamaları gerektirir. Görsel: Yazar
Yapılandırma dosyaları
Pyright yapılandırmayı pyrightconfig.json veya pyproject.toml dosyasından okur. Her ikisi de varsa pyrightconfig.json önceliklidir.
Yapılandırma dosyası Pyright davranışını kontrol eder. Görsel: Yazar.
Birçok kişiyi ters köşe yapan kritik bir detay: exclude değerini elle tanımlarsanız bu, varsayılanları tamamen değiştirir. Her zaman node_modules,__pycache__ ve sanal ortamınızı özel dışlama kalıplarınıza ekleyin. Aksi halde Pyright bağımlılıklarınıza da analiz uygular ve büyük yavaşlamalara neden olur. Bana güvenin, tür denetimi için 10 dakika beklemek istemezsiniz.
Sanal ortam yapılandırması
Pyright kurulu paketlerinizi nasıl bulur? Nereye bakacağını söylemeniz gerekir. Bunu venvPath ve venv ile yapılandırın:
Bu, Pyright'a paketleri ./.venv içinde aramasını söyler. Farklı bir sanal ortam konumu kullanıyorsanız buna göre ayarlayın. Bunu yapmazsanız Pyright kurulu bağımlılıklarınızı bulamaz ve her şey için eksik içe aktarma hataları raporlar.
Teşhisleri bastırma
Bazen Pyright teknik olarak haklıdır ama yine de belirli hataları susturmanız gerekir. Belki eski kodla çalışıyorsunuz ya da belirli bir durumda tür denetleyiciden daha iyi biliyorsunuz. Hataları üç düzeyde bastırabilirsiniz.
Belirli kural sözdizimi ([reportAssignmentType]), aynı satırda diğerlerini devre dışı bırakmadan yalnızca bir denetimi susturmak istediğinizde kullanışlıdır.
Yapılandırmayı ele aldığımıza göre Pyright'ın geliştirme ortamınızla nasıl entegre olduğuna bakalım.
VS Code ve IDE'lerde Pyright
Çoğu Python geliştiricisi gibiyseniz Pyright'ı komut satırından çok Pylance üzerinden deneyimleyeceksiniz. Bu ilişkiyi anlamak, düzenleyicinizi doğru yapılandırmanıza ve yaygın sorunlardan kaçınmanıza yardımcı olur.
Pyright vs. Pylance
Pylance, Pyright'ın tür denetim motorunu paketleyen Microsoft'un VS Code uzantısıdır. Pylance'ı kurduğunuzda Pyright'ı otomatik olarak edinirsiniz. Ancak Pylance, açık kaynak Pyright'ta olmayan özellikler ekler:
Anlamsal vurgulama: değişkenler türlerine göre renklendirilir
Gelişmiş otomatik içe aktarma: daha akıllı içe aktarma önerileri
Kod gezinme: çalışma alanınız genelinde "Tüm Başvuruları Bul"
Bu özellikler kapalı kaynaktır ve yalnızca VS Code'da mevcuttur. Neovim, Emacs veya başka bir düzenleyici kullanıyorsanız bu ekstralar olmadan çekirdek Pyright işlevselliğini edinirsiniz.
Pylance, tür hatalarını düzenleyicide vurgular. Görsel: Yazar.
diagnosticMode ayarı performansı etkiler."openFilesOnly" yalnızca açık dosyaları analiz eder. "workspace" her şeyi analiz eder ama daha fazla bellek ve CPU kullanır.
Yaygın yapılandırma tuzakları
Yorumlayıcı seçimi önemlidir. Pylance, kurulu paketleri bulmak için seçili Python yorumlayıcınızı kullanır. Kurulu olduğunu bildiğiniz paketler için birdenbire hatalar görünürse VS Code durum çubuğunda doğru yorumlayıcının seçili olduğunu kontrol edin.
Yorumlayıcı seçimi, paket keşif yollarını etkiler. Görsel: Yazar.
CLI ve Pylance varsayılanları farklıdır. Pylance, typeCheckingMode'u "off" olarak varsayarken CLI "standard"'ı varsayar. Pylance ayrıca arama yollarına otomatik olarak src ekler; CLI eklemez. Düzenleyiciniz ve CI arasında tutarlı davranış için tüm seçenekleri açıkça pyproject.toml içinde ayarlayın.
"Griye dönen kod" olgusu. Pylance, tür analizine göre erişilemeyen kodu griye boyar. Kod beklenmedik şekilde gri görünürse hemen öncesinde çağrılan işlevi kontrol edin. NoReturn döndüğü yazılan bir işlev, sonrasındaki her şeyin erişilemez görünmesine neden olur.
Pyright vs. Mypy: Hangisini Ne Zaman Kullanmalı?
Şunu merak ediyor olabilirsiniz: Pyright mı kullanmalıyım yoksa Mypy ile mi devam etmeliyim? Her iki araç da üretime hazırdır ve seçiminiz iş akışınıza ve gereksinimlerinize bağlıdır. Temel farkları özetleyeyim.
Hız ve tepki verme
Pyright, tam proje taramalarında yaklaşık 3-5 kat daha hızlıdır ve artımlı denetimlerde neredeyse anlıktır. Bu, en çok anlık geri bildirim istediğiniz geliştirme sırasında önemlidir.
Mypy'nin performansı iyileştiren bir arka plan modu (dmypy) vardır, ancak yine de daha yavaştır ve bazen yeniden başlatma gerektiren önbellekleme sorunları yaşar.
Tür çıkarımı farkları
İşler burada ilginçleşiyor. Araçlar türleri farklı çıkarır. Şu koda bakın:
Pyright, demetler değişmez olduğu için tuple[Literal[10], Literal[20]] şeklinde, tam değerleri koruyarak çıkarım yapar. Mypy ise tuple[int, int] çıkarır ve genel tiplere genişletir.
Pyright'ın yaklaşımı daha fazla hatayı yakalar ancak bazen işlevler genel tipler beklediğinde sürtüşme yaratır. Bu pratikte nadiren önemlidir çünkü Literal[10], int'in geçerli bir alt türüdür.
Açıklamasız kod analizi
Bu, en büyük pratik fark ve eski kod tabanları için oyunun kurallarını değiştirir. Mypy, varsayılan olarak tür açıklaması olmayan işlevleri atlar. Pyright ise yine de analiz eder ve tür ipuçları olmadan bile bariz hataları yakalar.
Tür açıklamaları seyrek olan eski kod tabanlarında Pyright, tanımsız değişkenleri ve imkânsız metot çağrılarını yakalayan güçlü bir linter gibi davranır. Mypy bu işlevleri "dinamik" kabul eder ve yok sayar.
Eklenti desteği
Mypy, Django ve SQLAlchemy gibi çerçeveler için eklentileri destekler. Bu eklentiler ORM sihrini anlar ve dinamik olarak üretilen öznitelikler için doğru türler sağlar.
Pyright'ın bir eklenti sistemi yoktur. Tamamen tür kütüklerine dayanır. 2026'da çoğu büyük kütüphanenin yüksek kaliteli kütükleri olduğundan bu, eskisi kadar önemli değil. Ancak ağır metaprogramlama kullanan bir çerçeve kullanıyorsanız Pyright'a taahhüt edmeden önce iyi kütükler olup olmadığını kontrol edin.
Boyut
Pyright
Mypy
Hız
3-5 kat daha hızlı
Daha yavaş
Açıklamasız kod
Varsayılan olarak analiz edilir
Varsayılan olarak atlanır
IDE entegrasyonu
VS Code/Pylance'ı çalıştırır
Ayrı kurulum gerekir
Eklenti sistemi
Yok
Django, SQLAlchemy vb.
Geliştirme sırasında anlık geri bildirim için Pylance (Pyright) kullanın ve projeniz çerçeve eklentileri kullanıyorsa CI'da hem Pyright hem de Mypy çalıştırmayı düşünün.
Pyright Kullanırken Yaygın Sorunlar
Pyright beklenmedik hatalar raporladığında, neden genellikle şu sorunlardan biridir.
Eksik tür kütükleri
Bu hatayı gördünüz mü? Pyright, bir paket için tür bilgisi bulamadığında şikayet eder:
Import "requests" could not be resolved (reportMissingImports)Altyapı:
Eksik kütükler içe aktarma uyarı hatalarını tetikler. Görsel: Yazar.
Önce paketin sanal ortamınıza kurulu olduğundan ve Pyright'ın onu nerede bulacağını bildiğinden emin olun (venvPathvevenv ayarlarını daha önce ele almıştık).
Paket kurulu ama tür bilgisi yoksa topluluk kütüklerini kurun:
Kütüğü olmayan paketler için iki seçeneğiniz var. Yapılandırmanızda "reportMissingTypeStubs": "none"ile uyarıyı kapatabilir veya kendiniz taslak kütük üretebilirsiniz:
Bu, kullandığınız yöntemlerle doldurabileceğiniz bir iskelet .pyi dosyası oluşturur.
Pre-commit kanca hataları
Pyright yerelde çalışıyor da pre-commit kancalarında mı başarısız oluyor? Sorun genellikle ortam izolasyonudur. Pre-commit, proje paketlerinizi göremeyen izole ortamlarda kancaları çalıştırır.
Bunu kancayı sanal ortamınıza işaret ederek düzeltin:
Strict modu etkinleştirdiniz ve birdenbire binlerce hata mı görüyorsunuz? Panik yapmayın. Bu normaldir. Strict mod eksiksiz tür açıklamaları ister. Basic veya standard modla başlayın, açıklamaları kademeli olarak ekleyin ve strict'i yalnızca tamamen yazımlanmış modüllerde etkinleştirin.
Eski kodu esnek bir modda tutmak için dosya başına yorumları kullanın:
Bu, yeni kodda sıkı denetimi zorunlu kılarken eski kodu kademeli olarak taşımanıza olanak tanır.
Sorun gidermenin ötesinde, baştan itibaren Pyright deneyiminizi daha sorunsuz hale getirecek bazı stratejiler burada.
Pyright Kullanımı için En İyi Uygulamalar
Farklı projelerde Pyright ile çalıştıktan sonra benimsemeyi kolaylaştıran birkaç şey öğrendim. Bu kodlama en iyi uygulamalarını benimsemek, tür denetiminin engel değil yardımcı olarak kalmasını sağlar.
Standard modla başlayın. Daha önce tartıştığımız gibi, eksiksiz açıklamalar gerektirmeden gerçek hataları yakalar. Kuralları her zaman daha sonra sıkılaştırabilirsiniz.
Pyright sürümünüzü sabitleyin. Pyright sık sürüm çıkarır ve yeni sürümler bazen daha önce geçen kodu işaretler. CI'da sabitlenmemiş bir pip install pyright, hafta sonu sürümlerinden pazartesi sabahı derleme hatalarına neden olabilir. Başıma geldi. Hoş değil.
[tool.pyright]
# In pyproject.toml
pythonVersion = "3.12"Altyapı:
# In requirements-dev.txt
pyright==1.1.408Altyapı:
Hataları kademeli olarak düzeltin. 10.000 hatayı bir anda yok etmeye çalışmayın. strict dizisini yalnızca belirli dizinlerde sıkı denetimi zorlamak için kullanın:
Yapılandırma dosyalarını erken kullanın. Küçük projeler için bile açık yapılandırma sürprizleri önler. Python sürümünüzü, sanal ortam yolunuzu ve seçtiğiniz sıkılık düzeyini belgelemek için beş dakikanızı ayırın. Gelecekteki siz size teşekkür edecek.
Hemen mükemmelliği hedeflemeyin. İlk etapta # pyright: ignore'ı cömertçe kullanın. Bu, teknik borcu görünür biçimde işaretler; böylece ilerlemeyi engellemek yerine zamanla temizleyebilirsiniz. Yeni araçları benimserken mükemmel, iyinin düşmanıdır.
Sonuç
Pyright, Python tür denetleyicileri arasında hız açısından pratik bir tercih olarak yerini aldı. TypeScript temeli, özellikle siz yazarken gerçekleşen artımlı denetimlerde gerçek avantajlar sunar.
Unutmayın, Pyright gibi araçlar en iyi, temel Python kavramları ikinci doğanız olduğunda çalışır. Bu eğitimdeki bazı bölümler beklediğinizden zor geldiyse ya da Pyright'ın ne yaptığını hâlâ netleştiremediyseniz, Geliştiriciler için Python'a Giriş kursumuzu öneririm.
Veri hatları, bulut ve YZ araçları üzerinde çalışan; aynı zamanda DataCamp ve gelişmekte olan geliştiriciler için pratik, yüksek etkili eğiticiler yazan bir veri mühendisi ve topluluk inşacısıyım.
Pyright SSS
Pyright, Jupyter not defterleriyle çalışır mı?⌄
Evet! Pyright, VS Code'daki Pylance uzantısı aracılığıyla.ipynb dosyalarını destekler. Not defteri hücrelerini yazarken gerçek zamanlı tür denetimi alırsınız. Komut satırından denetim için not defterinizin sanal ortamını dahil etmek üzere pyright --pythonpath kullanın.
Kesinlikle. Resmî depodakipyright-python kancasını kullanın. Sadece pre-commit'in bağımlılıklarını bulabilmesi için yapılandırma dosyanızda venvPath ayarlandığından emin olun. Aksi halde yanlış içe aktarma hataları alırsınız.
Pyright düzenleyicimi yavaşlatır mı?⌄
Farkedilir düzeyde değil. Pyright ayrı bir süreçte çalışır ve varsayılan olarak yalnızca açık dosyaları analiz eder. Devasa bir monoreponuz varsa işleri hızlı tutmak için VS Code ayarlarında "diagnosticMode": "openFilesOnly" olarak ayarlayın.
Pyright'ı eski bir kod tabanında kademeli olarak benimseyebilir miyim?⌄
Evet, üstelik Mypy'ye kıyasla daha kolaydır. "typeCheckingMode": "basic" ile başlayın ve eski klasörleri hariç tutmak için ignore dizisini kullanın. İlk başta # pyright: ignore yorumlarını cömertçe ekleyin, sonra zamanla temizleyin.
Pyright, Python 2.7'i destekler mi?⌄
Hayır. Pyright yalnızca Python 3.0 ve üzerini destekler. Hâlâ Python 2.7 kullanıyorsanız Mypy ile devam etmeniz veya önce kod tabanınızı yükseltmeniz gerekir. Python 2, 2020'de kullanım ömrünü tamamladı; artık geçiş zamanı.
Pyright performans açısından Mypy ile nasıl karşılaştırılır?⌄
Pyright belirgin biçimde daha hızlıdır, özellikle artımlı denetimlerde. Python yerine Node.js üzerinde çalışır; bu da analizi hızlandırır. Farkı en çok düzenleyicide yazarken görürsünüz, hatalar kaydettikten sonra değil anında görünür. CI hatları için ikisi de gayet uygundur.
Pyright ve Pylance arasındaki temel farklar nelerdir?⌄
Şöyle düşünün: Pyright motor, Pylance ise arabadır. Pyright, her yerde kullanabileceğiniz açık kaynak tür denetleyicisidir. Pylance ise Pyright'ı sarmalayıp anlamsal vurgulama ve akıllı içe aktarmalar gibi ekstralar ekleyen Microsoft'un VS Code uzantısıdır. VS Code kullanmıyorsanız doğrudan Pyright kullanıyorsunuz demektir.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Tür ipuçları, Python kodunu anlamayı ve bakımını kolaylaştırır. Ama işin püf noktası şu: İpuçları tek başına hataları yakalamaz. Deklare ettiğiniz türlere kodunuzun gerçekten uyup uymadığını doğrulamak için bir tür denetleyiciye ihtiyacınız vardır.
Üretimde hem Mypy hem de Pyright kullandım. Pyright'ın hız avantajı özellikle geliştirme sırasında belirgindir. Tür hataları, kaydettikten sonra değil, siz yazarken görünür. Büyük kod tabanlarında bu daha hızlı geri bildirim döngüsü gerçekten fark yaratır.
Bu eğitim, Pyright'ı etkili biçimde kullanmaya başlamak için gereken her şeyi kapsar. Nasıl kuracağınızı, projeniz için nasıl yapılandıracağınızı ve VS Code ile nasıl entegre edeceğinizi göstereceğim. Ayrıca Pyright ile Mypy arasındaki farkları da irdeleyeceğim.
Pyright Nedir?
Pyright, Microsoft tarafından geliştirilen bir Python statik tür denetleyicisidir. Kodunuzu okur, tür açıklamalarını analiz eder ve türler eşleşmediğinde hataları raporlar. Kod çalıştığında hataları yakalayan çalışma zamanı kontrollerinin aksine, statik analiz hataları bir şey çalıştırmadan önce yakalar.
Çoğu Python aracı Python ile yazılmışken, Pyright TypeScript ile yazılmıştır ve Node.js üzerinde çalışır. Bir Python aracı için tuhaf bir seçim, değil mi? Ama Pyright'ı bu kadar hızlı yapan da budur. V8 JavaScript motoru, CPython'dan çok daha hızlı çalışır.
Pyright ile iki şekilde karşılaşırsınız. Birleştirmelerden önce tür hatalarını yakalamak için CI/CD hatlarında komut satırı aracı olarak çalıştırabilirsiniz. Ya da farkında olmadan zaten kullanıyor olabilirsiniz. VS Code için Microsoft'un Python uzantısı olan Pylance'ı çalıştırır. Tür hatalarının altındaki kırmızı dalgalı çizgiler mi? Bu, perde arkasında çalışan Pyright'tır.
Araç, Python standart kitaplığı ve yaygın paketler için paketlenmiş tür kütükleriyle gelir.
os,jsonveyatypingkullanan kodu denetlemek için ekstra bir şey kurmanız gerekmez. Üçüncü taraf paketler için Pyright, typeshed'den topluluk tarafından bakım yapılan kütükleri veya ayrıca kurduğunuz paket özelindeki kütükleri kullanır.Pyright Nasıl Kurulur
Şimdi Pyright'ı sisteminizde çalıştıralım. İki kurulum seçeneğiniz var: npm (yerel yaklaşım) veya pip (Python sarmalayıcı).
npm ile Pyright kurulumu
Önerilen kurulum, Pyright Node.js üzerinde çalıştığı için npm kullanır. Node.js sürümünüzün 14.0.0 veya üzeri olması gerekir.
Hızlı kontroller için global, sürümü sabitlemek istediğim projeler için yerel kurulum kullanırım.
npxyaklaşımı, global paketlerinize ekleme yapmadan tek seferlik işler için kullanışlıdır.Python sarmalayıcı ile Pyright kurulumu
Ekibiniz tamamen Python ile çalışıyor ve araç zincirinde Node.js istemiyorsa bir PyPI sarmalayıcısı mevcut:
Sarmalayıcı, sisteminizde Node.js olup olmadığını denetler. Eksikse sarmalayıcı otomatik olarak bağımsız bir sürüm indirir.
[nodejs]eklentisi, varsayılandan daha güvenilir bir indirme yöntemi kullanır.Aklınızda bulunsun, bazı ödünler vardır. İlk çalıştırmada bağımlılıklar indirilirken daha uzun sürer. Ağ erişimi kısıtlı CI ortamlarında başarısız olabilir. Ayrıca PyPI sürümü bazen npm sürümlerinin birkaç gün gerisinden gelir.
Çoğu Python ekibi için sarmalayıcı gayet iyi çalışır. Ancak sorun yaşarsanız npm kurulumuna geri dönün. Daha güvenilirdir.
Bir Python Projesinde Pyright Çalıştırma
Kurulum tamamlandıktan sonra Pyright'ı çalıştırmak basittir. Proje dizininize gidin ve şunu çalıştırın:
Hepsi bu. Pyright Python dosyalarını tarar, analiz eder ve bulduğu tür hatalarını raporlar. Karmaşık bir kurulum gerekmez.
Pyright varsayılan olarak neleri denetler
Pyright neye bakar? Herhangi bir yapılandırma olmadan birkaç denetim gerçekleştirir. Gerçek kullanım ile eşleşen tür açıklamalarını doğrular. Tanımsız değişkenleri ve erişilemeyen kodu yakalar. İçe aktarmaları doğru şekilde doğrular. Bir tamsayı beklenirken bir dizge geçirilmesi gibi bariz tür uyumsuzluklarını işaretler.
Hataları olan bir projeden örnek çıktı:
Her hata dosya yolunu, satır ve sütunu ve bir açıklamayı gösterir. Parantez içindeki kural adı (ör.
reportArgumentType) hatayı hangi denetimin tetiklediğini tam olarak söyler. Bu, belirli kuralları bastırmak istediğinizde önemlidir. Bunu birazdan ele alacağız.Çıkış kodlarını anlama
Pyright, sonuça bağlı olarak farklı çıkış kodları döndürür:
Çıkış Kodu
Anlamı
0
Hata bulunmadı
1
Tür hataları bulundu
2
Fatal hata (çökme, bellek yetersiz)
3
Yapılandırma dosyası hatası
4
Geçersiz komut satırı argümanları
CI hatlarında genellikle 1 çıkış kodunda derlemenin başarısız olmasını istersiniz. 2-4 kodları, aracın kendisiyle ilgili bir sorun olduğunu, kodunuzla değil, gösterir.
Pyright'ı Yapılandırma
Pyright kutudan çıktığı gibi çalışsa da gerçek projeler özelleştirme ister. Hangi dosyaların denetleneceğini, hedef Python sürümünü ve analizin ne kadar sıkı olacağını belirtmek istersiniz. Temel yapılandırma seçeneklerine bakalım.
Tür denetim modları
Pyright dört sıkılık düzeyi sunar. Seçeceğiniz mod, kaç kuralın etkinleşeceğini belirler.
Mod
Davranış
off
Tür denetimi yok; yalnızca sözdizimi hataları raporlanır
basic
Temel denetimler; en esnek analiz
standard
Tam denetim; 2026'da varsayılan
strict
Maksimum güvenlik; eksiksiz açıklamalar gerektirir
Hangi modu seçmelisiniz? Yeni projeler için standard mod ile başlayın. Sizi hatalara boğmadan gerçek hataları yakalar. Eski kodla mı çalışıyorsunuz? Basic mod, yazım kurallarını kademeli benimsediğinizde daha iyi çalışır. Strict modu ise maksimum güvenlik istediğiniz kütüphaneler ve kritik altyapı için saklayın.
Uyarı: standard'dan strict'e geçiş ciddi bir sıçramadır. Strict mod, tüm işlev parametreleri ve dönüş değerleri için tür açıklamalarını zorunlu kılmak da dahil yaklaşık 30 ek kural etkinleştirir. Geçiş yaptığınızda raporlanan hatalarda 10 kat artış bekleyin. Bunu zor yoldan öğrendim.
Strict mod eksiksiz tür açıklamaları gerektirir. Görsel: Yazar
Yapılandırma dosyaları
Pyright yapılandırmayı
pyrightconfig.jsonveyapyproject.tomldosyasından okur. Her ikisi de varsapyrightconfig.jsonönceliklidir.İşte en küçük
pyrightconfig.jsonörneği:pyproject.tomliçindeki eşdeğeri:Yapılandırma dosyası Pyright davranışını kontrol eder. Görsel: Yazar.
Birçok kişiyi ters köşe yapan kritik bir detay:
excludedeğerini elle tanımlarsanız bu, varsayılanları tamamen değiştirir. Her zamannode_modules,__pycache__ve sanal ortamınızı özel dışlama kalıplarınıza ekleyin. Aksi halde Pyright bağımlılıklarınıza da analiz uygular ve büyük yavaşlamalara neden olur. Bana güvenin, tür denetimi için 10 dakika beklemek istemezsiniz.Sanal ortam yapılandırması
Pyright kurulu paketlerinizi nasıl bulur? Nereye bakacağını söylemeniz gerekir. Bunu
venvPathvevenvile yapılandırın:Bu, Pyright'a paketleri
./.venviçinde aramasını söyler. Farklı bir sanal ortam konumu kullanıyorsanız buna göre ayarlayın. Bunu yapmazsanız Pyright kurulu bağımlılıklarınızı bulamaz ve her şey için eksik içe aktarma hataları raporlar.Teşhisleri bastırma
Bazen Pyright teknik olarak haklıdır ama yine de belirli hataları susturmanız gerekir. Belki eski kodla çalışıyorsunuz ya da belirli bir durumda tür denetleyiciden daha iyi biliyorsunuz. Hataları üç düzeyde bastırabilirsiniz.
Yapılandırma düzeyinde bastırma
Kuralları global olarak devre dışı bırakın:
Dosya düzeyinde bastırma
Dosyanın en üstüne bir yorum ekleyin:
Satır düzeyinde bastırma
Tek bir satırı bastırın:
Belirli kural sözdizimi (
[reportAssignmentType]), aynı satırda diğerlerini devre dışı bırakmadan yalnızca bir denetimi susturmak istediğinizde kullanışlıdır.Yapılandırmayı ele aldığımıza göre Pyright'ın geliştirme ortamınızla nasıl entegre olduğuna bakalım.
VS Code ve IDE'lerde Pyright
Çoğu Python geliştiricisi gibiyseniz Pyright'ı komut satırından çok Pylance üzerinden deneyimleyeceksiniz. Bu ilişkiyi anlamak, düzenleyicinizi doğru yapılandırmanıza ve yaygın sorunlardan kaçınmanıza yardımcı olur.
Pyright vs. Pylance
Pylance, Pyright'ın tür denetim motorunu paketleyen Microsoft'un VS Code uzantısıdır. Pylance'ı kurduğunuzda Pyright'ı otomatik olarak edinirsiniz. Ancak Pylance, açık kaynak Pyright'ta olmayan özellikler ekler:
Bu özellikler kapalı kaynaktır ve yalnızca VS Code'da mevcuttur. Neovim, Emacs veya başka bir düzenleyici kullanıyorsanız bu ekstralar olmadan çekirdek Pyright işlevselliğini edinirsiniz.
Pylance, tür hatalarını düzenleyicide vurgular. Görsel: Yazar.
Gerekli VS Code ayarları
Pylance'ı VS Code ayarlarıyla yapılandırın:
diagnosticModeayarı performansı etkiler."openFilesOnly"yalnızca açık dosyaları analiz eder."workspace"her şeyi analiz eder ama daha fazla bellek ve CPU kullanır.Yaygın yapılandırma tuzakları
Yorumlayıcı seçimi önemlidir. Pylance, kurulu paketleri bulmak için seçili Python yorumlayıcınızı kullanır. Kurulu olduğunu bildiğiniz paketler için birdenbire hatalar görünürse VS Code durum çubuğunda doğru yorumlayıcının seçili olduğunu kontrol edin.
Yorumlayıcı seçimi, paket keşif yollarını etkiler. Görsel: Yazar.
CLI ve Pylance varsayılanları farklıdır. Pylance,
typeCheckingMode'u"off"olarak varsayarken CLI"standard"'ı varsayar. Pylance ayrıca arama yollarına otomatik olaraksrcekler; CLI eklemez. Düzenleyiciniz ve CI arasında tutarlı davranış için tüm seçenekleri açıkçapyproject.tomliçinde ayarlayın."Griye dönen kod" olgusu. Pylance, tür analizine göre erişilemeyen kodu griye boyar. Kod beklenmedik şekilde gri görünürse hemen öncesinde çağrılan işlevi kontrol edin.
NoReturndöndüğü yazılan bir işlev, sonrasındaki her şeyin erişilemez görünmesine neden olur.Pyright vs. Mypy: Hangisini Ne Zaman Kullanmalı?
Şunu merak ediyor olabilirsiniz: Pyright mı kullanmalıyım yoksa Mypy ile mi devam etmeliyim? Her iki araç da üretime hazırdır ve seçiminiz iş akışınıza ve gereksinimlerinize bağlıdır. Temel farkları özetleyeyim.
Hız ve tepki verme
Pyright, tam proje taramalarında yaklaşık 3-5 kat daha hızlıdır ve artımlı denetimlerde neredeyse anlıktır. Bu, en çok anlık geri bildirim istediğiniz geliştirme sırasında önemlidir.
Mypy'nin performansı iyileştiren bir arka plan modu (
dmypy) vardır, ancak yine de daha yavaştır ve bazen yeniden başlatma gerektiren önbellekleme sorunları yaşar.Tür çıkarımı farkları
İşler burada ilginçleşiyor. Araçlar türleri farklı çıkarır. Şu koda bakın:
Pyright, demetler değişmez olduğu için
tuple[Literal[10], Literal[20]]şeklinde, tam değerleri koruyarak çıkarım yapar. Mypy isetuple[int, int]çıkarır ve genel tiplere genişletir.Pyright'ın yaklaşımı daha fazla hatayı yakalar ancak bazen işlevler genel tipler beklediğinde sürtüşme yaratır. Bu pratikte nadiren önemlidir çünkü
Literal[10],int'in geçerli bir alt türüdür.Açıklamasız kod analizi
Bu, en büyük pratik fark ve eski kod tabanları için oyunun kurallarını değiştirir. Mypy, varsayılan olarak tür açıklaması olmayan işlevleri atlar. Pyright ise yine de analiz eder ve tür ipuçları olmadan bile bariz hataları yakalar.
Tür açıklamaları seyrek olan eski kod tabanlarında Pyright, tanımsız değişkenleri ve imkânsız metot çağrılarını yakalayan güçlü bir linter gibi davranır. Mypy bu işlevleri "dinamik" kabul eder ve yok sayar.
Eklenti desteği
Mypy, Django ve SQLAlchemy gibi çerçeveler için eklentileri destekler. Bu eklentiler ORM sihrini anlar ve dinamik olarak üretilen öznitelikler için doğru türler sağlar.
Pyright'ın bir eklenti sistemi yoktur. Tamamen tür kütüklerine dayanır. 2026'da çoğu büyük kütüphanenin yüksek kaliteli kütükleri olduğundan bu, eskisi kadar önemli değil. Ancak ağır metaprogramlama kullanan bir çerçeve kullanıyorsanız Pyright'a taahhüt edmeden önce iyi kütükler olup olmadığını kontrol edin.
Boyut
Pyright
Mypy
Hız
3-5 kat daha hızlı
Daha yavaş
Açıklamasız kod
Varsayılan olarak analiz edilir
Varsayılan olarak atlanır
IDE entegrasyonu
VS Code/Pylance'ı çalıştırır
Ayrı kurulum gerekir
Eklenti sistemi
Yok
Django, SQLAlchemy vb.
Geliştirme sırasında anlık geri bildirim için Pylance (Pyright) kullanın ve projeniz çerçeve eklentileri kullanıyorsa CI'da hem Pyright hem de Mypy çalıştırmayı düşünün.
Pyright Kullanırken Yaygın Sorunlar
Pyright beklenmedik hatalar raporladığında, neden genellikle şu sorunlardan biridir.
Eksik tür kütükleri
Bu hatayı gördünüz mü? Pyright, bir paket için tür bilgisi bulamadığında şikayet eder:
Eksik kütükler içe aktarma uyarı hatalarını tetikler. Görsel: Yazar.
Önce paketin sanal ortamınıza kurulu olduğundan ve Pyright'ın onu nerede bulacağını bildiğinden emin olun (
venvPathvevenvayarlarını daha önce ele almıştık).Paket kurulu ama tür bilgisi yoksa topluluk kütüklerini kurun:
Kütüğü olmayan paketler için iki seçeneğiniz var. Yapılandırmanızda
"reportMissingTypeStubs": "none"ile uyarıyı kapatabilir veya kendiniz taslak kütük üretebilirsiniz:Bu, kullandığınız yöntemlerle doldurabileceğiniz bir iskelet
.pyidosyası oluşturur.Pre-commit kanca hataları
Pyright yerelde çalışıyor da pre-commit kancalarında mı başarısız oluyor? Sorun genellikle ortam izolasyonudur. Pre-commit, proje paketlerinizi göremeyen izole ortamlarda kancaları çalıştırır.
Bunu kancayı sanal ortamınıza işaret ederek düzeltin:
Beklenmeyen strict mod hataları
Strict modu etkinleştirdiniz ve birdenbire binlerce hata mı görüyorsunuz? Panik yapmayın. Bu normaldir. Strict mod eksiksiz tür açıklamaları ister. Basic veya standard modla başlayın, açıklamaları kademeli olarak ekleyin ve strict'i yalnızca tamamen yazımlanmış modüllerde etkinleştirin.
Eski kodu esnek bir modda tutmak için dosya başına yorumları kullanın:
Bu, yeni kodda sıkı denetimi zorunlu kılarken eski kodu kademeli olarak taşımanıza olanak tanır.
Sorun gidermenin ötesinde, baştan itibaren Pyright deneyiminizi daha sorunsuz hale getirecek bazı stratejiler burada.
Pyright Kullanımı için En İyi Uygulamalar
Farklı projelerde Pyright ile çalıştıktan sonra benimsemeyi kolaylaştıran birkaç şey öğrendim. Bu kodlama en iyi uygulamalarını benimsemek, tür denetiminin engel değil yardımcı olarak kalmasını sağlar.
Standard modla başlayın. Daha önce tartıştığımız gibi, eksiksiz açıklamalar gerektirmeden gerçek hataları yakalar. Kuralları her zaman daha sonra sıkılaştırabilirsiniz.
Pyright sürümünüzü sabitleyin. Pyright sık sürüm çıkarır ve yeni sürümler bazen daha önce geçen kodu işaretler. CI'da sabitlenmemiş bir
pip install pyright, hafta sonu sürümlerinden pazartesi sabahı derleme hatalarına neden olabilir. Başıma geldi. Hoş değil.Hataları kademeli olarak düzeltin. 10.000 hatayı bir anda yok etmeye çalışmayın.
strictdizisini yalnızca belirli dizinlerde sıkı denetimi zorlamak için kullanın:Yapılandırma dosyalarını erken kullanın. Küçük projeler için bile açık yapılandırma sürprizleri önler. Python sürümünüzü, sanal ortam yolunuzu ve seçtiğiniz sıkılık düzeyini belgelemek için beş dakikanızı ayırın. Gelecekteki siz size teşekkür edecek.
Hemen mükemmelliği hedeflemeyin. İlk etapta
# pyright: ignore'ı cömertçe kullanın. Bu, teknik borcu görünür biçimde işaretler; böylece ilerlemeyi engellemek yerine zamanla temizleyebilirsiniz. Yeni araçları benimserken mükemmel, iyinin düşmanıdır.