2009-12-02 9 views
28

तो आज मैं 2.0.2 बाजार करने के लिए उन्नत, और मैं इस संदेश को (मैं हिम तेंदुआ पर हूँ, Btw) प्राप्त करने के लिए शुरू कर दिया:पायथन लोकेल अजीब त्रुटि। यहाँ क्या चल रहा है?

bzr: warning: unknown locale: UTF-8 
    Could not determine what text encoding to use. 
    This error usually means your Python interpreter 
    doesn't support the locale set by $LANG (en_US.UTF-8) 
    Continuing with ascii encoding. 

बहुत ही अजीब है, क्योंकि मेरी LANG वास्तव में खाली है। इसी बात हो सकता है जब मैं

Python 2.5.4 (r254:67916, Nov 30 2009, 14:09:22) 
[GCC 4.3.4] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale 
>>> locale.getdefaultlocale() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/sbo/runtimes/lib/python2.5/locale.py", line 443, in getdefaultlocale 
    return _parse_localename(localename) 
    File "/Users/sbo/runtimes/lib/python2.5/locale.py", line 375, in _parse_localename 
    raise ValueError, 'unknown locale: %s' % localename 
ValueError: unknown locale: UTF-8 

LANG निर्यात में मदद नहीं करता

[email protected]:~ $ export LANG=en_US.UTF-8 
[email protected]:~ $ bzr 
bzr: warning: unknown locale: UTF-8 
    Could not determine what text encoding to use. 
    This error usually means your Python interpreter 
    doesn't support the locale set by $LANG (en_US.UTF-8) 
    Continuing with ascii encoding. 

हालांकि, इस समस्या

[email protected]:~ $ export LANG=en_US.UTF-8 
[email protected]:~ $ export LC_ALL=en_US.UTF-8 

Python 2.5.4 (r254:67916, Nov 30 2009, 14:09:22) 
[GCC 4.3.4] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale 
>>> locale.getdefaultlocale() 
('en_US', 'UTF8') 

तुम समझा कृपया सकते हैं क्या हो रहा है हल लोकेल मॉड्यूल के साथ टिंकर करने की कोशिश बेहतर googlability के लिए, यहाँ पर?

+0

आपकी समस्या में कोई और अंतर्दृष्टि? –

+0

+1 दो "निर्यात" लाइनों ने मेरा "ValueError: अज्ञात लोकेल: ..." चलाया। – Bogatyr

+0

उन अंतिम दो पंक्तियों के लिए बहुत बहुत धन्यवाद। मुझे बचाया और मुझे यकीन है कि बहुत सारे मैक उपयोगकर्ता बहुत समय से हैं। –

उत्तर

16

2016 अपडेट: कम से कम 2013 के बाद से this is a Python bug बाहर निकलता है, शायद पहले भी, पाइथन में गैर-जीएनयू लोकेशंस को अच्छी प्रतिक्रिया नहीं दे रहा है - जैसे मैक ओएस एक्स और बीएसडी में पाए गए। बग अभी भी सितंबर 2016 तक खुला है, और हर पायथन संस्करण को प्रभावित करता है।


अगर कोई LANG वातावरण चर सेट था, संभावना है कि आप था कर रहे हैं या तो एक LC_CTYPE (कुंजी चर) या LC_ALL वातावरण चर UTF-8 करने के लिए सेट (जो सेट करता है, तो ओवरराइड करता है), जो एक वैध ओएस एक्स स्थान नहीं है । ऐप्पल द्वारा आपूर्ति किए गए /usr/bin/python या कस्टम पाइथन के साथ पुन: उत्पन्न करना काफी आसान है, जैसा कि आपके मामले में है, जो कि 10.6 एसडीके (शायद 10.5 एसडीके) के साथ बनाया गया था। आप इसे python.org पायथन के साथ इस तरह से पुन: पेश नहीं कर पाएंगे; वे वर्तमान में 10.4 एसडीके के साथ बनाया गया है जहां लोकेल एपीआई अलग-अलग व्यवहार करते हैं।

$ unset LANG 
$ env | grep LC_ 
$ export LC_CTYPE="UTF-8" 
$ /usr/bin/python # Apple-supplied python 
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale ; locale.getdefaultlocale() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 459, in getdefaultlocale 
    return _parse_localename(localename) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 391, in _parse_localename 
    raise ValueError, 'unknown locale: %s' % localename 
ValueError: unknown locale: UTF-8 
^D 
$ /usr/local/bin/python2.6 # python.org python 
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale ; locale.getdefaultlocale() 
(None, 'mac-roman') 
>>> 

संपादित करें:

पहेली के लिए एक और टुकड़ा हो सकता है। bzr 2.0.1 पर एक त्वरित रूप से मैंने स्थापित किया है इंगित करता है कि आपके द्वारा उद्धृत संदेश केवल तभी दिखाना चाहिए जब locale.getpreferredencoding()locale.Error उठाता है। ऐसा करने का एक तरीका यह है कि यदि पाइथन _locale.so सी एक्सटेंशन लोड नहीं किया जा सकता है और यदि ऐसा हो तो अनुमति हो सकती है। उदाहरण के लिए, मैकपॉर्ट्स वर्तमान में problems setting permissions if you have a customized umask के लिए जाना जाता है; मुझे उस मुद्दे से खुद को जला दिया गया है। पाइथन lib/python2.5/lib-dynload निर्देशिका में _locale.so की अनुमतियों की जांच करें और सुनिश्चित करें कि यह 755 है। मैकपॉर्ट्स का पूरा पथ होना चाहिए:

/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/ 
+0

पायथन मैं हूँ उपयोग हाथ से स्थापित है, यह मानक पायथन स्थापना ओएसएक्स के साथ बंडल नहीं है। इसके अलावा, ऐसा प्रतीत होता है कि मेरे पास _locale.so या _locale.dylib नहीं है .... ओह? –

+0

lib-dynlib में _locale.so होना चाहिए। यदि नहीं, तो आपके पायथन को ओएस एक्स पर सही ढंग से नहीं बनाया गया था और locale.py कुछ डिफ़ॉल्ट व्यवहारों पर वापस आ जाएगा। –

+0

@NedDeily, ऐसा लगता है कि अब आप इस उत्तर से क्या बेहतर जानते हैं, क्योंकि आपने https://bugs.python.org/issue18378#msg215215 में बहुत अच्छी व्याख्या दी है। शायद आप अपना जवाब ठीक कर सकते हैं? (गुगलता के लिए, जैसे ओपी ने पूछा) – hmijail

4

यह एक मैक ओएस एक्स समस्या है। अपनी लोकेल सेटिंग्स देखने के लिए, टर्मिनल में locale चलाएं। locale -a आपके द्वारा परिभाषित सभी लोकल सूचीबद्ध करना चाहिए (कि आप LC_ALL पर तर्क के रूप में उपयोग कर सकते हैं)।

ध्यान दें कि LC_ALL और अन्य LC_* परिभाषित होने पर चर LANG पर प्राथमिकता लेते हैं।

+0

अधिक विशेष रूप से यह पर्यावरण के साथ एक समस्या है न कि केवल मैक ओएस एक्स। लिनक्स और अन्य यूनिक्स क्लोन के साथ ही आप एक ही समस्या का सामना कर रहे हैं यदि आप अपने पर्यावरण को अनुकूलित करते हैं और अनजाने में चीज़ों को छोड़ देते हैं। कभी-कभी समस्याएं तत्काल दिखाई देती हैं, और दूसरी बार जब तक आपको वास्तव में काम करने की आवश्यकता नहीं होती है। फिर भी एक ही बात करने के कई तरीके होने का एक और लक्षण ... – jathanism

+1

@synack: यह ऐसा कुछ है जो ओएस एक्स के साथ पहले आया है, यही कारण है कि * मुझे नहीं लगता कि ऐसा इसलिए है क्योंकि स्टीफानो ने अपना पर्यावरण बदल दिया है। – u0b34a0f6ae

+0

@ kaiser.se: आपको क्यों लगता है कि यह एक समस्या है और ओएस एक्स के साथ क्यों? एक एलसी_सीटीवाईई या एलसी_ओएल सेट होने से ओपी द्वारा देखा गया व्यवहार बताता है और दस्तावेज के रूप में काम कर रहा है। मैंने जो उदाहरण दिया है, वह वर्तमान डेबियन लिनक्स सिस्टम पर बिल्कुल उसी तरह विफल रहता है, जिसमें अपवाद के साथ उस प्रणाली पर नया बैश वास्तव में आपको चेतावनी देता है जब एलसी_सीटीपीई को अमान्य मान "यूटीएफ -8" में निर्यात करते समय। –

1

मुझे एक ही समस्या का सामना करना पड़ा। जब मैं locale चला गया, मैंने देखा कि LANG और LC_ALL अनसेट थे।इसलिए मैं .bash_profile फ़ाइल में निम्नलिखित लाइनों को जोड़कर इस तय:

export LC_ALL=en_US.UTF-8 
export LANG=en_US.UTF-8 

तो मैं बस भाग गया:

source ~/.bash_profile 

और इस मुद्दे पर मेरे Mac उसके बाद तय किया गया था।

संबंधित मुद्दे