2025, Sep 26 01:31

Databricks के spark जैसे ग्लोबल्स के लिए Ruff में F821 कैसे दबाएं

Databricks नोटबुक में spark पर निर्भर कोड में Ruff F821 undefined-name आता है? pyproject.toml/ruff.toml में builtins जोड़ें, चेतावनी दबाएं और लिंटिंग सुसंगत रखें.

Ruff और पर्यावरण-प्रदत्त ग्लोबल्स: कोड में अव्यवस्था बढ़ाए बिना F821 को कैसे दबाएं

Databricks जैसे प्रबंधित परिवेश में नोटबुक पर काम करते समय आप अक्सर उन ग्लोबल्स पर निर्भर रहते हैं जिन्हें प्लेटफ़ॉर्म आपके लिए इंजेक्ट करता है। इसका सबसे आम उदाहरण spark है। लेकिन लोकल रूप से आपका linter उस रनटाइम संदर्भ को नहीं देख पाता और F821 undefined-name उठाता है। यह टूल का वैध संकेत है, मगर इस स्थिति में यह सिर्फ असुविधा बन जाता है।

न्यूनतम पुनरुत्पादनीय उदाहरण

नीचे दिया गया स्निपेट Databricks नोटबुक में पूरी तरह वैध है, फिर भी ruff check F821 रिपोर्ट करता है:

# Databricks नोटबुक स्रोत
result_frame = spark.sql("SELECT 'hello world'")
result_frame.show()

यह F821 क्यों ट्रिगर करता है

कोड उस नाम का संदर्भ देता है जो फ़ाइल में घोषित नहीं है। Databricks रनटाइम में spark पर्यावरण द्वारा उपलब्ध कराया जाता है, लेकिन linter केवल सोर्स देखता है और उस पहचानकर्ता को अपरिभाषित मानता है, इसलिए F821 undefined-name त्रुटि आती है।

स्पष्ट उपाय मौजूद हैं—जैसे ग्लोबल को सीधे लोड करना या जहाँ ज़रूरत हो वहाँ # noqa: F821 लिख देना—लेकिन दोनों तरीकों से या तो बोइलरप्लेट बढ़ता है या कोड बिखरता है। Ruff के लिए ऐसे नाम घोषित करने का एक साफ़ तरीका मौजूद है।

समाधान: builtins के जरिए Ruff को अपने ग्लोबल्स के बारे में बताएं

Ruff में अतिरिक्त बिल्ट-इन नाम घोषित करने की सेटिंग है। वहाँ spark जोड़कर आप linter को बताते हैं कि यह ज्ञात ग्लोबल है, और वह इसे अपरिभाषित के रूप में फ़्लैग करना बंद कर देता है। यह कॉन्फ़िगरेशन आप pyproject.toml या ruff.toml में रख सकते हैं।

# pyproject.toml
[tool.ruff]
builtins = ["spark"]
# ruff.toml
builtins = ["spark"]

यह प्रविष्टि जोड़ने के बाद, आपके नोटबुक में spark के उपयोग पर Ruff अब F821 नहीं उठाएगा।

यह क्यों फायदेमंद है

Ruff में पर्यावरण-प्रदत्त ग्लोबल्स घोषित करने से आपका कोड व्यावसायिक तर्क पर केंद्रित रहता है—न अतिरिक्त इम्पोर्ट्स, न हर लाइन पर suppress करने की ज़रूरत। साथ ही, यह निष्पादन परिवेश के साथ आपके इरादतन अनुबंध को एक केंद्रीकृत जगह—linter कॉन्फ़िगरेशन—में औपचारिक करता है, ताकि पूरे कोडबेस में व्यवहार एकसमान रहे।

निष्कर्ष

यदि आपके Python नोटबुक Databricks द्वारा दिए गए ग्लोबल्स, जैसे spark, पर निर्भर करते हैं, तो Ruff को builtins सेटिंग के जरिए उन्हें पहचानने के लिए कॉन्फ़िगर करें। कोड साफ़ रखें, अनावश्यक शोर से बचें, और बाकी जगह उपयोगी स्थिर जाँचें बनाए रखें।

यह लेख StackOverflow पर एक प्रश्न (लेखक: Fabitosh) और InSync के उत्तर पर आधारित है।