मुख्य सामग्री पर जाएँ

Pyright गाइड: Python कोड के लिए तेज़ स्टैटिक टाइप चेकिंग

Python में स्टैटिक टाइप चेकिंग के लिए Pyright को इंस्टॉल और उपयोग करना सीखें। यह गाइड कॉन्फ़िगरेशन, IDE इंटीग्रेशन, ट्रबलशूटिंग, और कब Pyright को Mypy पर चुनें, कवर करता है।
· 12 मि॰ पढ़ें

AI के साथ खोजें

टाइप हिंट्स Python कोड को समझना और मेंटेन करना आसान बनाते हैं। लेकिन बात यह है: केवल हिंट्स से त्रुटियाँ नहीं पकड़ी जातीं। आपने जो टाइप घोषित किए हैं, वास्तव में आपका कोड उनका पालन कर रहा है या नहीं, यह जाँचने के लिए एक टाइप चेकर चाहिए।

मैंने प्रोडक्शन में Mypy और Pyright दोनों का उपयोग किया है। विकास के दौरान Pyright का स्पीड एडवांटेज सबसे ज़्यादा दिखता है। टाइप एरर सेव करने के बाद नहीं, टाइप करते समय ही दिख जाते हैं। बड़े कोडबेस में यह तेज़ फीडबैक लूप सच में फर्क डालता है।

यह ट्यूटोरियल Pyright को प्रभावी ढंग से इस्तेमाल करने के लिए ज़रूरी हर चीज़ कवर करता है। मैं दिखाऊँगा कि इसे कैसे इंस्टॉल करें, अपने प्रोजेक्ट के लिए कॉन्फ़िगर करें, और VS Code के साथ इंटीग्रेट करें। मैं Pyright और Mypy के बीच के फर्क भी स्पष्ट करूँगा।

Pyright क्या है?

Pyright, Microsoft द्वारा विकसित Python के लिए एक स्टैटिक टाइप चेकर है। यह आपका कोड पढ़ता है, टाइप एनोटेशन का विश्लेषण करता है, और जब टाइप मेल नहीं खाते तो त्रुटियाँ रिपोर्ट करता है। रनटाइम चेक के विपरीत, जो कोड के चलने पर त्रुटियाँ पकड़ते हैं, स्टैटिक विश्लेषण इन्हें चलाने से पहले ही पकड़ लेता है।

what is python pyright

जहाँ अधिकतर Python टूल Python में लिखे होते हैं, वहीं Pyright TypeScript में लिखा गया है और Node.js पर चलता है। Python टूल के लिए यह अजीब चुनाव लगता है, है ना? लेकिन यही वजह है कि Pyright इतना तेज़ है। V8 JavaScript इंजन, CPython की तुलना में बहुत तेज़ निष्पादन करता है।

आप Pyright से दो तरीकों से मिलेंगे। आप इसे कमांड-लाइन टूल के रूप में CI/CD पाइपलाइनों में चला सकते हैं ताकि मर्ज से पहले टाइप एरर पकड़े जा सकें। या आप बिना जाने इसे पहले से इस्तेमाल कर रहे होंगे। यह Pylance, Microsoft का VS Code के लिए Python एक्सटेंशन, को पावर देता है। टाइप एरर के नीचे लाल लहरदार रेखाएँ? यह Pyright है जो पर्दे के पीछे काम कर रहा है।

यह टूल Python स्टैंडर्ड लाइब्रेरी और आम पैकेजों के लिए बंडल्ड टाइप स्टब्स के साथ आता है। os, json, या typing उपयोग करने वाले कोड को चेक करने के लिए आपको कुछ अतिरिक्त इंस्टॉल नहीं करना पड़ता। थर्ड-पार्टी पैकेजों के लिए, Pyright typeshed से समुदाय-द्वारा मेंटेन किए गए स्टब्स या पैकेज-विशिष्ट स्टब्स (जो आप अलग से इंस्टॉल करते हैं) का उपयोग करता है।

Pyright कैसे इंस्टॉल करें

अब अपने सिस्टम पर Pyright चलाते हैं। आपके पास दो इंस्टॉलेशन विकल्प हैं: npm (नेटिव तरीका) या pip (Python रैपर)।

npm से Pyright इंस्टॉल करना

अनुशंसित इंस्टॉलेशन npm का उपयोग करता है क्योंकि Pyright Node.js पर चलता है। आपको Node.js वर्ज़न 14.0.0 या उससे ऊपर की आवश्यकता होगी।

# Global installation
npm install -g pyright

# Run without installing globally
npx pyright

# Local project installation
npm install --save-dev pyright

मैं त्वरित जाँचों के लिए ग्लोबल इंस्टॉलेशन और उन प्रोजेक्ट्स के लिए लोकल इंस्टॉलेशन उपयोग करता/करती हूँ जहाँ मैं वर्ज़न को पिन करना चाहता/चाहती हूँ। npx तरीका एकबारगी उपयोग के लिए उपयोगी है, बिना आपके ग्लोबल पैकेजेज़ में जोड़े।

Python रैपर के जरिए Pyright इंस्टॉल करना

यदि आपकी टीम पूरी तरह Python में काम करती है और टूलचेन में Node.js नहीं चाहती, तो एक PyPI रैपर उपलब्ध है:

# Standard installation
pip install pyright

# Recommended: includes Node.js automatically
pip install pyright[nodejs]

रैपर आपके सिस्टम पर Node.js की जाँच करता है। यदि यह मौजूद नहीं है, तो रैपर स्वचालित रूप से स्टैंडअलोन वर्ज़न डाउनलोड कर देता है। [nodejs] एक्स्ट्रा डिफ़ॉल्ट की तुलना में अधिक भरोसेमंद डाउनलोड विधि का उपयोग करता है।

ध्यान रखें कि इसमें कुछ ट्रेड-ऑफ हैं। पहली बार चलाने में डिपेंडेंसी डाउनलोड होने के कारण ज़्यादा समय लग सकता है। नेटवर्क-प्रतिबंधित CI वातावरण में यह असफल हो सकता है। और PyPI वर्ज़न कभी-कभी npm रिलीज़ से कुछ दिन पीछे रहता है।

अधिकांश Python टीमों के लिए रैपर ठीक काम करता है। लेकिन यदि आप समस्याओं में फँसते हैं, तो npm इंस्टॉलेशन पर लौट आएँ। यह अधिक विश्वसनीय है।

Python प्रोजेक्ट पर Pyright चलाना

इंस्टॉल होने के बाद, Pyright चलाना सरल है। अपने प्रोजेक्ट डायरेक्टरी में जाएँ और चलाएँ:

pyright

बस इतना ही। Pyright Python फाइलें स्कैन करता है, उनका विश्लेषण करता है, और जो भी टाइप एरर मिलते हैं, उन्हें रिपोर्ट करता है। किसी जटिल सेटअप की ज़रूरत नहीं।

Pyright डिफ़ॉल्ट रूप से क्या जाँचता है

Pyright क्या ढूँढता है? बिना किसी कॉन्फ़िगरेशन के, यह कई जाँचें करता है। यह टाइप एनोटेशन का वास्तविक उपयोग से मेल खाना वैलिडेट करता है। यह अनडिफ़ाइंड वेरिएबल्स और अनरीचेबल कोड पकड़ता है। यह इम्पोर्ट्स को सही तरह से वेरिफ़ाई करता है। यह स्पष्ट टाइप मिसमैचेज़ को फ़्लैग करता है, जैसे जहाँ पूर्णांक चाहिए वहाँ स्ट्रिंग पास करना।

यहाँ एरर वाले एक प्रोजेक्ट का उदाहरण आउटपुट है:

/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 informations

प्रत्येक एरर फाइल पथ, पंक्ति संख्या, कॉलम और विवरण दिखाता है। कोष्ठक में नियम का नाम (जैसे reportArgumentType) यह बताता है कि कौन-सी जाँच से एरर ट्रिगर हुआ। यह तब मायने रखता है जब आप विशिष्ट नियमों को सप्रेस करना चाहते हैं। इसे हम आगे कवर करेंगे।

एग्ज़िट कोड समझना

परिणाम के आधार पर Pyright अलग-अलग एग्ज़िट कोड लौटाता है:e

एग्ज़िट कोड

अर्थ

0

कोई त्रुटि नहीं मिली

1

टाइप एरर मिले

2

घातक त्रुटि (क्रैश, मेमोरी समाप्त)

3

कॉन्फ़िगरेशन फाइल त्रुटि

4

अमान्य कमांड-लाइन आर्गुमेंट्स

CI पाइपलाइनों में, आप आमतौर पर एग्ज़िट कोड 1 पर बिल्ड असफल करना चाहेंगे। एग्ज़िट कोड 2-4 संकेत देते हैं कि समस्या आपके कोड में नहीं, बल्कि स्वयं टूल में हुई है।

Pyright को कॉन्फ़िगर करना

हालाँकि Pyright आउट-ऑफ-द-बॉक्स काम करता है, वास्तविक प्रोजेक्ट्स में कस्टमाइज़ेशन चाहिए। आप यह तय करना चाहेंगे कि किन फाइलों को चेक करना है, कौन-सा Python वर्ज़न टार्गेट करना है, और विश्लेषण कितना सख्त होना चाहिए। आइए प्रमुख कॉन्फ़िगरेशन विकल्प देखें।

टाइप चेकिंग मोड

Pyright चार सख्ती-स्तर देता है। आप जो मोड चुनते हैं, वही यह तय करता है कि कितने नियम सक्षम होंगे।o

मोड

व्यवहार

off

कोई टाइप चेकिंग नहीं; केवल सिंटैक्स एरर रिपोर्ट

basic

मूलभूत जाँचें; सबसे उदार विश्लेषण

standard

पूर्ण जाँच; 2026 में डिफ़ॉल्ट

strict

अधिकतम सेफ़्टी; पूर्ण एनोटेशन आवश्यक

आपको कौन-सा मोड चुनना चाहिए? नए प्रोजेक्ट्स के लिए standard मोड से शुरू करें। यह बिना आपको त्रुटियों से भर दिए वास्तविक बग पकड़ता है। लेगेसी कोड के साथ काम कर रहे हैं? Basic मोड तब अच्छा काम करता है जब आप धीरे-धीरे टाइपिंग अपनाते हैं। strict मोड को लाइब्रेरीज़ और क्रिटिकल इंफ्रास्ट्रक्चर के लिए बचाएँ जहाँ आप अधिकतम सुरक्षा चाहते हैं।

एक चेतावनी: standard से strict पर छलांग काफ़ी बड़ी है। Strict मोड लगभग 30 अतिरिक्त नियम सक्षम करता है, जिनमें सभी फ़ंक्शन पैरामीटर और रिटर्न वैल्यू पर टाइप एनोटेशन की आवश्यकता भी शामिल है। स्विच करने पर रिपोर्टेड एरर में 10x बढ़ोतरी की उम्मीद करें। मैंने यह अनुभव करके सीखा है।

Comparison of Pyright basic mode with no errors versus strict mode showing missing type annotation errors

Strict मोड पूर्ण टाइप एनोटेशन की मांग करता है। चित्र: लेखक द्वारा

कॉन्फ़िगरेशन फाइलें

Pyright, pyrightconfig.json या pyproject.toml से कॉन्फ़िगरेशन पढ़ता है। यदि दोनों मौजूद हैं, तो pyrightconfig.json को प्राथमिकता मिलती है।

यहाँ एक न्यूनतम pyrightconfig.json है:

{
  "include": ["src"],
  "exclude": ["**/node_modules", "**/__pycache__", "**/.venv"],
  "pythonVersion": "3.12",
  "typeCheckingMode": "standard"
}

pyproject.toml में समतुल्य:

[tool.pyright]
include = ["src"]
exclude = ["**/node_modules", "**/__pycache__", "**/.venv"]
pythonVersion = "3.12"
typeCheckingMode = "standard"

VS Code showing pyrightconfig.json configuration file with include exclude and typeCheckingMode settings

कॉन्फ़िगरेशन फाइल Pyright के व्यवहार को नियंत्रित करती है। चित्र: लेखक द्वारा।

यहाँ एक महत्वपूर्ण बात जो कई लोगों को उलझाती है: यदि आप exclude को मैन्युअली परिभाषित करते हैं, तो यह पूरी तरह डिफ़ॉल्ट्स को बदल देता है। कस्टम exclude पैटर्न में हमेशा node_modules, __pycache__, और अपनी वर्चुअल एन्वायरनमेंट को शामिल करें। वरना, Pyright आपकी डिपेंडेंसीज़ का विश्लेषण करने की कोशिश करेगा, जिससे भारी स्लोडाउन होगा। मुझ पर भरोसा करें, आप टाइप चेक के लिए 10 मिनट इंतज़ार नहीं करना चाहेंगे।

वर्चुअल एन्वायरनमेंट कॉन्फ़िगरेशन

Pyright आपके इंस्टॉल किए गए पैकेज कैसे ढूँढता है? आपको इसे बताना होगा कि कहाँ देखना है। इसे venvPath और venv से कॉन्फ़िगर करें:

{
  "venvPath": ".",
  "venv": ".venv"
}

यह Pyright को ./.venv में पैकेज ढूँढने को कहता है। यदि आप वर्चुअल एन्वायरनमेंट का अलग लोकेशन इस्तेमाल करते हैं, तो उसे अनुसार बदलें। इसके बिना, Pyright आपकी इंस्टॉल्ड डिपेंडेंसीज़ नहीं ढूँढ पाएगा और हर चीज़ के लिए missing import एरर रिपोर्ट करेगा।

डायग्नोस्टिक्स सप्रेस करना

कभी-कभी Pyright तकनीकी रूप से सही होता है, फिर भी आपको कुछ विशिष्ट एरर चुप कराने पड़ते हैं। हो सकता है आप लेगेसी कोड के साथ काम कर रहे हों, या किसी खास मामले में आप टाइप चेकर से बेहतर जानते हों। आप तीन स्तरों पर एरर सप्रेस कर सकते हैं।

कॉन्फ़िगरेशन स्तर पर सप्रेशन

नियमों को ग्लोबली डिसेबल करें:

{
  "reportMissingTypeStubs": "none",
  "reportUnusedVariable": "warning"
}

फाइल स्तर पर सप्रेशन

फाइल के शीर्ष पर एक टिप्पणी जोड़ें:

# pyright: basic
# pyright: reportPrivateUsage=false

पंक्ति-स्तर पर सप्रेशन

केवल एक पंक्ति सप्रेस करें:

x: int = "hello"  # type: ignore
x: int = "hello"  # pyright: ignore
x: int = "hello"  # pyright: ignore[reportAssignmentType]

विशिष्ट नियम वाला सिंटैक्स ([reportAssignmentType]) तब उपयोगी है जब आप उसी पंक्ति पर अन्य चेक डिसेबल किए बिना केवल एक जाँच को चुप कराना चाहते हैं।

कॉन्फ़िगरेशन कवर हो गया है, अब देखते हैं कि Pyright आपके डेवलपमेंट एन्वायरनमेंट के साथ कैसे इंटीग्रेट होता है।

VS Code और IDEs में Pyright

यदि आप अधिकांश Python डेवलपर्स की तरह हैं, तो आप कमांड लाइन की बजाय Pylance के माध्यम से Pyright अनुभव करेंगे। इस संबंध को समझना आपके एडिटर को ठीक से कॉन्फ़िगर करने और आम गलतियों से बचने में मदद करता है।

Pyright बनाम Pylance

Pylance Microsoft का VS Code एक्सटेंशन है जो Pyright के टाइप-चेकिंग इंजन को बंडल करता है। जब आप Pylance इंस्टॉल करते हैं, तो आपको Pyright स्वतः मिल जाता है। लेकिन Pylance ऐसी विशेषताएँ जोड़ता है जो ओपन-सोर्स Pyright में नहीं हैं:

  • सेमांटिक हाइलाइटिंग: वेरिएबल्स को उनके टाइप के आधार पर रंगना
  • एडवांस्ड ऑटो-इम्पोर्ट: होशियार इम्पोर्ट सजेशंस
  • कोड नेविगेशन: आपके वर्कस्पेस में "Find All References"

ये फ़ीचर क्लोज़्ड-सोर्स हैं और केवल VS Code में उपलब्ध हैं। यदि आप Neovim, Emacs, या कोई अन्य एडिटर इस्तेमाल करते हैं, तो आपको Pyright की कोर क्षमता मिलेगी, लेकिन ये एक्स्ट्रा नहीं।

VS Code editor showing Pylance type error with red underline and error message in Problems panel

Pylance एडिटर में टाइप एरर को हाइलाइट करता है। चित्र: लेखक द्वारा।

आवश्यक VS Code सेटिंग्स

VS Code की सेटिंग्स के माध्यम से Pylance को कॉन्फ़िगर करें:

{
  "python.languageServer": "Pylance",
  "python.analysis.typeCheckingMode": "standard",
  "python.analysis.diagnosticMode": "openFilesOnly"
}

diagnosticMode सेटिंग प्रदर्शन को प्रभावित करती है। "openFilesOnly" केवल वे फाइलें विश्लेषित करता है जो आपने खोली हैं। "workspace" सब कुछ विश्लेषित करता है लेकिन अधिक मेमोरी और CPU उपयोग करता है।

आम कॉन्फ़िगरेशन समस्याएँ

इंटरप्रेटर चयन मायने रखता है। Pylance इंस्टॉल किए गए पैकेज खोजने के लिए आपके चुने हुए Python इंटरप्रेटर का उपयोग करता है। यदि अचानक उन पैकेजों के लिए एरर दिखने लगें जो आपको पता है कि इंस्टॉल हैं, तो VS Code स्टेटस बार में सही इंटरप्रेटर चुना है या नहीं, यह जाँचें।

इंटरप्रेटर चयन पैकेज डिस्कवरी पाथ को प्रभावित करता है। चित्र: लेखक द्वारा।

CLI और Pylance के डिफ़ॉल्ट अलग हैं। Pylance, typeCheckingMode को "off" पर डिफ़ॉल्ट करता है जबकि CLI का डिफ़ॉल्ट "standard" है। Pylance स्वतः src को सर्च पाथ में जोड़ देता है; CLI ऐसा नहीं करता। अपने एडिटर और CI के बीच सुसंगत व्यवहार के लिए, सभी विकल्पों को pyproject.toml में स्पष्ट रूप से सेट करें।

"ग्रे हो गया कोड" घटना। Pylance टाइप विश्लेषण के आधार पर अनरीचेबल कोड को ग्रे कर देता है। यदि कोड अनपेक्षित रूप से ग्रे दिख रहा है, तो उसके ठीक पहले कॉल किए गए फ़ंक्शन को जाँचें। NoReturn रिटर्न करने वाला फ़ंक्शन उसके बाद की हर चीज़ को अनरीचेबल दिखा देता है।

Pyright बनाम Mypy: किसे कब उपयोग करें

आप सोच रहे होंगे: क्या मुझे Pyright इस्तेमाल करना चाहिए या Mypy पर बने रहना चाहिए? दोनों टूल प्रोडक्शन-रेडी हैं, और चुनाव आपके वर्कफ़्लो और आवश्यकताओं पर निर्भर है। मैं प्रमुख अंतर बताता/बताती हूँ।

स्पीड और रेस्पॉन्सिवनेस

फुल प्रोजेक्ट स्कैन के लिए Pyright लगभग 3–5x तेज़ है और इन्क्रीमेंटल चेक के लिए लगभग तात्कालिक। यह विकास के दौरान सबसे अधिक मायने रखता है, जब आपको तुरंत फीडबैक चाहिए।

Mypy में एक डेमन मोड (dmypy) है जो प्रदर्शन सुधारता है, लेकिन यह अभी भी धीमा है और कभी-कभी कैशिंग समस्याएँ आती हैं जिनके लिए रिस्टार्ट करने पड़ते हैं।

टाइप इन्फ़रेंस में अंतर

यहीं चीज़ें दिलचस्प हो जाती हैं। टूल टाइप्स को अलग तरह से इन्फ़र करते हैं। यह कोड देखें:

coordinates = (10, 20)

Pyright tuple[Literal[10], Literal[20]] इन्फ़र करता है, सटीक मान सुरक्षित रखते हुए क्योंकि ट्यूपल इम्यूटेबल होते हैं। Mypy tuple[int, int] इन्फ़र करता है, जो सामान्य टाइप्स तक चौड़ा कर देता है।

Pyright का तरीका अधिक एरर पकड़ता है, लेकिन कभी-कभी तब रुकावट आती है जब फ़ंक्शन सामान्य टाइप की अपेक्षा करते हैं। व्यवहार में यह बहुत कम मायने रखता है क्योंकि Literal[10] , int का वैध सबटाइप है।

अनएनोटेटेड कोड का विश्लेषण

यह सबसे बड़ा व्यावहारिक अंतर है, और लेगेसी कोडबेस के लिए गेम-चेंजर है। Mypy डिफ़ॉल्ट रूप से बिना एनोटेशन वाले फ़ंक्शनों को छोड़ देता है। Pyright वैसे भी उनका विश्लेषण करता है, बिना टाइप हिंट्स के भी स्पष्ट एरर पकड़ता है।

कम एनोटेशन वाले लेगेसी कोडबेस में, Pyright एक शक्तिशाली लिंटर की तरह काम करता है जो अनडिफ़ाइंड वेरिएबल्स और असंभव मेथड कॉल्स पकड़ता है। Mypy ऐसे फ़ंक्शनों को "डायनेमिक" मानकर नज़रअंदाज़ करता है।

प्लगइन सपोर्ट

Mypy में Django और SQLAlchemy जैसे फ़्रेमवर्क्स के लिए प्लगइन्स हैं। ये प्लगइन्स ORM मैजिक समझते हैं और डायनेमिक रूप से जनरेटेड एट्रीब्यूट्स के लिए सटीक टाइप देते हैं।

Pyright में कोई प्लगइन सिस्टम नहीं है। यह पूरी तरह टाइप स्टब्स पर निर्भर है। 2026 में, अधिकांश प्रमुख लाइब्रेरीज़ के उच्च-गुणवत्ता वाले स्टब्स हैं, इसलिए यह पहले जितना मायने नहीं रखता। लेकिन यदि आप ऐसे फ़्रेमवर्क का उपयोग करते हैं जिसमें भारी मेटाप्रोग्रामिंग है, तो Pyright अपनाने से पहले जाँच लें कि अच्छे स्टब्स मौजूद हैं या नहीं।ing

पहलू

Pyright

Mypy

स्पीड

3–5x तेज़

धीमा

अनएनोटेटेड कोड

डिफ़ॉल्ट रूप से विश्लेषित

डिफ़ॉल्ट रूप से छोड़ा गया

IDE इंटीग्रेशन

VS Code/Pylance को पावर देता है

अलग सेटअप आवश्यक

प्लगइन सिस्टम

नहीं

Django, SQLAlchemy, आदि

डेवलपमेंट के दौरान त्वरित फीडबैक के लिए Pylance (Pyright) का उपयोग करें, और यदि आपका प्रोजेक्ट फ़्रेमवर्क प्लगइन्स इस्तेमाल करता है, तो CI में Pyright और Mypy दोनों चलाने पर विचार करें।

Pyright उपयोग करते समय आम समस्याएँ

जब Pyright अप्रत्याशित एरर रिपोर्ट करता है, तो कारण आमतौर पर इनमें से कोई एक होता है।

टाइप स्टब्स गायब

क्या आपने यह एरर देखा है? जब Pyright किसी पैकेज के लिए टाइप जानकारी नहीं ढूँढ पाता, तो वह शिकायत करता है:

Import "requests" could not be resolved (reportMissingImports)

VS Code showing Pyright missing import error with yellow underline on import statement

Missing stubs इम्पोर्ट चेतावनी एरर ट्रिगर करते हैं। चित्र: लेखक द्वारा।

पहले, जाँचें कि पैकेज आपकी वर्चुअल एन्वायरनमेंट में इंस्टॉल है और Pyright को पता है कि इसे कहाँ ढूँढना है (पहले कवर की गई venvPath और venv सेटिंग्स का उपयोग करके)।

यदि पैकेज इंस्टॉल है लेकिन टाइप जानकारी नहीं है, तो कम्युनिटी स्टब्स इंस्टॉल करें:

pip install types-requests types-PyYAML types-redis

जिन पैकेजों के लिए स्टब्स उपलब्ध नहीं हैं, उनके लिए आपके पास दो विकल्प हैं। आप अपनी कॉन्फ़िग में "reportMissingTypeStubs": "none" से चेतावनी डिसेबल कर सकते हैं। या अपने आप ड्राफ्ट स्टब्स जनरेट करें:

pyright --createstub some_package

यह एक कंकाल .pyi फाइल बनाता है जिसे आप उन मेथड्स से भर सकते हैं जिन्हें आप वास्तव में उपयोग करते हैं।

प्रि-कमिट हुक फेल्योर

क्या Pyright लोकली काम करता है लेकिन प्रि-कमिट हुक्स में फेल हो जाता है? आमतौर पर कारण एन्वायरनमेंट आइसोलेशन होता है। प्रि-कमिट हुक्स आइसोलेटेड एन्वायरनमेंट में चलते हैं जो आपके प्रोजेक्ट के इंस्टॉल्ड पैकेज नहीं देख पाते।

हुक को आपकी वर्चुअल एन्वायरनमेंट की ओर इंगित करके इसे ठीक करें:

repos:
  - repo: https://github.com/RobertCraigie/pyright-python
    rev: v1.1.408
    hooks:
      - id: pyright
        args: ["--venvpath", ".", "--venv", ".venv"]

Strict मोड में अप्रत्याशित एरर

Strict मोड सक्षम किया और अचानक हज़ारों एरर दिख रहे हैं? घबराएँ नहीं। यह सामान्य है। Strict मोड पूर्ण टाइप एनोटेशन की मांग करता है। Basic या standard मोड से शुरू करें, एनोटेशन धीरे-धीरे जोड़ें, और केवल पूरी तरह टाइप किए गए मॉड्यूल पर strict सक्षम करें।

लेगेसी कोड को उदार मोड पर रखने के लिए प्रति-फाइल टिप्पणी का उपयोग करें:

# pyright: basic

यह आपको नए कोड पर सख्त जाँच लागू करने देता है, जबकि पुराने कोड को धीरे-धीरे माइग्रेट किया जा सकता है।

ट्रबलशूटिंग से आगे, यहाँ कुछ रणनीतियाँ हैं जो शुरू से ही आपका Pyright अनुभव सुगम बनाएँगी।

Pyright उपयोग के लिए श्रेष्ठ अभ्यास

विभिन्न प्रोजेक्ट्स में Pyright के साथ काम करने के बाद, मैंने कुछ बातें सीखी हैं जो अपनाने को आसान बनाती हैं। इन कोडिंग श्रेष्ठ अभ्यासों को अपनाने से आपकी टाइप चेकिंग सहायक बनी रहती है, बाधा नहीं।

Standard मोड से शुरू करें। जैसा कि पहले चर्चा की गई, यह बिना पूर्ण एनोटेशन की मांग किए वास्तविक बग पकड़ता है। आप बाद में नियमों को सख्त कर सकते हैं।

अपने Pyright वर्ज़न को पिन करें। Pyright अक्सर रिलीज़ करता है, और नए वर्ज़न कभी-कभी पहले पास हो रहे कोड को फ़्लैग कर देते हैं। CI में, अनपिन्ड pip install pyright सप्ताहांत रिलीज़ से सोमवार सुबह बिल्ड फेल्योर का कारण बन सकता है। मेरे साथ हुआ है। अच्छा अनुभव नहीं है।

[tool.pyright]
# In pyproject.toml
pythonVersion = "3.12"
# In requirements-dev.txt
pyright==1.1.408

एरर को धीरे-धीरे ठीक करें। एक बार में 10,000 एरर खत्म करने की कोशिश न करें। strict एरे का उपयोग करके केवल विशिष्ट डायरेक्टरीज़ पर strict चेकिंग लागू करें:

{
  "typeCheckingMode": "standard",
  "strict": ["src/core", "src/api"]
}

कॉन्फ़िगरेशन फाइलें शुरू में ही उपयोग करें। छोटे प्रोजेक्ट्स के लिए भी, स्पष्ट कॉन्फ़िगरेशन आश्चर्य से बचाता है। अपना Python वर्ज़न, वर्चुअल एन्वायरनमेंट पाथ, और चुना हुआ सख्ती-स्तर डॉक्युमेंट करने में पाँच मिनट लगाएँ। भविष्य में आप खुद को धन्यवाद देंगे।

तुरंत परिपूर्णता का लक्ष्य न रखें। शुरुआत में # pyright: ignore का उदारतापूर्वक उपयोग करें। यह तकनीकी कर्ज़ को दृश्य बनाता है ताकि आप समय के साथ इसे साफ़ कर सकें, बजाय प्रगति रोकने के। परफेक्ट, अच्छा का दुश्मन है — खासकर जब नया टूलिंग अपना रहे हों।

निष्कर्ष

Python टाइप चेकरों में स्पीड के लिहाज़ से Pyright ने अपनी जगह बना ली है। इसकी TypeScript नींव वास्तविक लाभ देती है, खासकर उन इन्क्रीमेंटल चेक्स के दौरान जो आप टाइप करते समय होते हैं।

ध्यान रखें, Pyright जैसे टूल तब सबसे अच्छा काम करते हैं जब मुख्य Python अवधारणाएँ आपके लिए सहज हों। तो यदि इस ट्यूटोरियल के कुछ हिस्से अपेक्षा से कठिन लगे, या आपको अभी भी स्पष्ट नहीं है कि Pyright क्या कर रहा है, तो मैं हमारे Introduction to Python for Developers कोर्स की सिफारिश करूँगा/करूँगी।

Khalid Abdelaty

लेखक

Khalid Abdelaty

मैं एक डेटा इंजीनियर और कम्युनिटी बिल्डर हूँ, जो डेटा पाइपलाइनों, क्लाउड, और AI टूलिंग के साथ काम करता/करती हूँ, साथ ही DataCamp और उभरते डेवलपर्स के लिए व्यावहारिक, असरदार ट्यूटोरियल लिखता/लिखती हूँ।

Pyright FAQs

क्या Pyright Jupyter नोटबुक्स के साथ काम करता है?

हाँ! Pyright, VS Code में Pylance एक्सटेंशन के माध्यम से .ipynb फाइलों को सपोर्ट करता है। आपको नोटबुक सेल लिखते समय रियल-टाइम टाइप चेकिंग मिलती है। कमांड-लाइन चेकिंग के लिए, अपने नोटबुक की वर्चुअल एन्वायरनमेंट को शामिल करने हेतु pyright --pythonpath का उपयोग करें।

क्या मैं Pyright को प्रि-कमिट हुक्स के साथ उपयोग कर सकता/सकती हूँ?

बिल्कुल। आधिकारिक रिपो से pyright-python हुक का उपयोग करें। बस यह सुनिश्चित करें कि प्रि-कमिट आपकी डिपेंडेंसीज़ ढूँढ सके, इसके लिए अपनी कॉन्फ़िग फाइल में venvPath कॉन्फ़िगर करें। अन्यथा, आपको ग़लत इम्पोर्ट एरर मिलेंगे।

क्या Pyright मेरा एडिटर धीमा कर देगा?

नहीं, ध्यान देने लायक नहीं। Pyright अलग प्रोसेस में चलता है और डिफ़ॉल्ट रूप से केवल खुली फाइलों का विश्लेषण करता है। यदि आपके पास एक बहुत बड़ा मोनोरेपो है, तो चीज़ों को तेज़ रखने के लिए VS Code सेटिंग्स में "diagnosticMode": "openFilesOnly" सेट करें।

क्या मैं लेगेसी कोडबेस में धीरे-धीरे Pyright अपना सकता/सकती हूँ?

हाँ, और यह वास्तव में Mypy से आसान है। "typeCheckingMode": "basic" से शुरू करें और लेगेसी फ़ोल्डर्स को बाहर करने के लिए ignore एरे का उपयोग करें। शुरुआत में # pyright: ignore टिप्पणियों का उदार उपयोग करें, फिर समय के साथ उन्हें साफ़ करें।

क्या Pyright Python 2.7 को सपोर्ट करता है?

नहीं। Pyright केवल Python 3.0 और उससे ऊपर को सपोर्ट करता है। यदि आप अब भी Python 2.7 पर हैं, तो आपको Mypy पर बने रहना होगा या पहले अपने कोडबेस को अपग्रेड करना होगा। Python 2 का जीवन-चक्र 2020 में समाप्त हो गया, इसलिए अब आगे बढ़ने का समय है।

प्रदर्शन के मामले में Pyright, Mypy से कैसे तुलना करता है?

Pyright स्पष्ट रूप से तेज़ है, खासकर इन्क्रीमेंटल चेक्स के लिए। यह Python के बजाय Node.js पर चलता है, जिससे विश्लेषण तेज़ हो जाता है। आप सबसे अधिक फर्क तब देखेंगे जब आप एडिटर में टाइप कर रहे हों — एरर सेव करने के बाद नहीं, तुरंत दिखाई देते हैं। CI पाइपलाइनों के लिए, दोनों ठीक काम करते हैं।

Pyright और Pylance के बीच मुख्य अंतर क्या हैं?

इसे ऐसे समझें: Pyright इंजन है, Pylance कार है। Pyright ओपन-सोर्स टाइप चेकर है, जिसे आप कहीं भी उपयोग कर सकते हैं। Pylance Microsoft का VS Code एक्सटेंशन है जो Pyright को रैप करता है और सेमांटिक हाइलाइटिंग और स्मार्ट इम्पोर्ट्स जैसे एक्स्ट्रा जोड़ता है। यदि आप VS Code का उपयोग नहीं कर रहे हैं, तो आप सीधे Pyright का उपयोग कर रहे हैं।

विषय