2025, Nov 02 03:32

Windows 10 में ./test.py चलाते समय ICU त्रुटि: कारण और समाधान

Windows 10 पर VS Code टर्मिनल में ./test.py चलाते समय ICU त्रुटि? कारण जानें: shebang व file association, और समाधान—python test.py या assoc/ftype से फ़िक्स।

Windows 10 पर ./test.py के रूप में सीधे Python स्क्रिप्ट चलाना कभी‑कभी ICU त्रुटि के साथ असफल हो सकता है, जबकि वही कोड python ./test.py से ठीक काम करता है। अगर यह समस्या VS Code के इंटीग्रेटेड टर्मिनल में, python.org की नई इंस्टॉलेशन के बाद दिखे, तो वजह कोड नहीं, बल्कि Windows का executable फ़ाइलों को Linux‑जैसे वातावरण की तुलना में अलग तरीके से संभालना है।

समस्या को पुनः उत्पन्न करना

शीर्ष पर Unix‑शैली के shebang के साथ test.py नाम से सेव की गई एक न्यूनतम स्क्रिप्ट लें।

#!/usr/bin/env python
print("Hello World")

इसे इस तरह चलाने पर त्रुटि मिलती है:

./test.py

लेकिन इंटरप्रेटर को स्पष्ट रूप से बुलाने पर सब ठीक चलता है:

python ./test.py

दिखी हुई त्रुटि कुछ ऐसी है:

[0711/233305.303:ERROR:icu_util.cc(223)] Invalid file descriptor to ICU data received.

असल में हो क्या रहा है

यहाँ अनजाने में Linux की दो परंपराएँ आ गई हैं: पाथ का ./ प्रीफ़िक्स और shebang #!/usr/bin/env python। Windows इस संदर्भ में forward slash को path separator की तरह नहीं लेता, और interpreter खोजने के लिए उस shebang का सम्मान भी नहीं करता। Windows पर ./test.py चलाने पर सिस्टम इसे ‘shebang के ज़रिये’ निष्पादित नहीं करता; बल्कि .py फ़ाइलों के लिए पंजीकृत file association पर निर्भर रहता है। यदि यह एसोसिएशन नहीं है या किसी अप्रत्याशित लक्ष्य की ओर इशारा कर रहा है, तो आपको ICU से संबंधित वही त्रुटि मिल सकती है। इसके विपरीत, python ./test.py आपके इंस्टॉल किए गए Python interpreter को सीधे कॉल करता है और association से जुड़ी समस्या पूरी तरह बायपास कर देता है।

अगर आप जानना चाहते हैं कि अलग‑अलग तरीकों से चलाने पर आपकी स्क्रिप्ट किस interpreter से चल रही है, तो अस्थायी रूप से executable का पाथ प्रिंट कर लें:

import sys
print(sys.executable)

ICU त्रुटि को कैसे ठीक करें या उससे बचें

इससे बचने का सबसे भरोसेमंद तरीका है Python को स्पष्ट रूप से कॉल करना, जैसे python test.py। स्क्रिप्ट से Unix वाला shebang हटाना Windows पर अपेक्षाएँ साफ़ रखने में मदद करता है। अगर आप python लिखे बिना सिर्फ़ नाम से स्क्रिप्ट चलाना चाहते हैं, तो सुनिश्चित करें कि Windows में .py फ़ाइलों के लिए सही file association सेट हो।

पहले सबसे सरल तरीका आज़माएँ: ./ प्रीफ़िक्स के बिना केवल नाम से स्क्रिप्ट चलाएँ। सही तरह से कॉन्फ़िगर किए गए Windows शेल में test.py टाइप कर Enter दबाने से .py एसोसिएशन के ज़रिये स्क्रिप्ट शुरू हो जानी चाहिए। अगर यह काम नहीं करता या वही ICU त्रुटि देता है, तो association को सेट या रिपेयर करें। UI में Open With → Choose another program चुनकर .py फ़ाइलों के लिए python चयन कर सकते हैं। वैकल्पिक तौर पर, उन्नत Command Prompt में ये कमांड चलाएँ (अपने python.exe का path बदलें):

assoc .py=Python.File
ftype Python.File="C:\Path\To\python.exe" "%1" %*

यदि एसोसिएशन फिर भी अटपटा व्यवहार करे, तो Python को पुनर्स्थापित (reinstall) करना सही सेटअप बहाल कर सकता है। इसके बाद या तो python test.py का उपयोग करें, या ./ प्रीफ़िक्स के बिना सिर्फ़ test.py।

संशोधित न्यूनतम स्क्रिप्ट

Windows पर Unix shebang की ज़रूरत नहीं है। स्क्रिप्ट न्यूनतम ही रह सकती है; यहाँ एक साफ़ संस्करण है।

greeting_text = "Hello World"
print(greeting_text)

यह क्यों मायने रखता है

क्रॉस‑प्लेटफ़ॉर्म आदतें Windows वर्कफ़्लो में घुसकर ऐसे टूलचेन एरर पैदा कर सकती हैं जो रनटाइम या लाइब्रेरी समस्या जैसे लगते हैं। icu_util.cc का संदेश Python कोड का नहीं, बल्कि स्क्रिप्ट कैसे चलाई गई इसका लक्षण है। यह समझना कि Windows .py फ़ाइलों के लिए file associations उपयोग करता है, Unix shebangs को नज़रअंदाज़ करता है, और ./ को path प्रीफ़िक्स की तरह नहीं मानता—इन भटकावों से समय बचाने में मदद करता है।

मुख्य बातें

Windows पर Python स्क्रिप्ट चलाने के लिए ./ या Unix‑स्टाइल shebang पर निर्भर न रहें। बेहतर है python test.py चलाएँ, या सही .py एसोसिएशन होने पर सीधे test.py। अगर स्क्रिप्ट सीधे चलाते समय ICU त्रुटि दिखे, तो Open With या assoc और ftype कमांड से .py एसोसिएशन ठीक करें, या Python पुनर्स्थापित करें। संदेह हो तो print(sys.executable) चलाकर वास्तव में कौनसा interpreter उपयोग हो रहा है, यह जाँच लें।

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