पाइप स्थापित - locale.Error: असमर्थित स्थान सेटिंग


232

पूर्ण स्टैकट्रेस:

  ~ pip install virtualenv
Traceback (most recent call last):
  File "/usr/bin/pip", line 11, in <module>
    sys.exit(main())
  File "/usr/lib/python3.4/site-packages/pip/__init__.py", line 215, in main
    locale.setlocale(locale.LC_ALL, '')
  File "/usr/lib64/python3.4/locale.py", line 592, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

एक ही सर्वर पर, मैं सफलतापूर्वक pip install virtualenvअजगर 2.7.x के साथ भाग गया।

अब, मैंने सिर्फ python3.4 का उपयोग करके स्थापित किया है curl https://bootstrap.pypa.io/get-pip.py | python3.4

  ~ pip --version
pip 8.1.1 from /usr/lib/python3.4/site-packages (python 3.4)

pip uninstall virtualenv एक ही त्रुटि भी फेंकता है


2
क्या आपने इसे अभी तक पढ़ा है?
idjaw

हां मेरे पास @idjaw है, नोड है कि यह मेरे मामले में एक रिक्त स्ट्रिंग है, यह आपके द्वारा
बताए

हाँ, मैंने नोटिस किया। क्या आपने pkg-reconfigure की कोशिश की?
idjaw

मेरा सर्वर सेंटोस है, उबंटू @idjaw नहीं है, मैंने जाँच की है और लगता है कि स्थानीय के साथ कुछ भी गलत नहीं हुआ हैLANG=en_GB.utf8
ericn

जवाबों:


616

मूल कारण है: आपका पर्यावरण चर LC_ALLकिसी भी तरह से गायब या अमान्य है

संक्षिप्त जवाब-

बस निम्नलिखित कमांड चलाएँ:

$ export LC_ALL=C

यदि आपको नई टर्मिनल विंडो में त्रुटि मिलती रहती है, तो इसे अपनी .bashrcफ़ाइल के निचले भाग में जोड़ें ।

लंबा जवाब-

यहाँ मेरी localeसेटिंग्स है:

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

Python2.7

    $ uname -a
    Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u6 (2015-11-09) x86_64 GNU/Linux
    $ python --version
    Python 2.7.9
    $ pip --version
    pip 8.1.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)
    $ unset LC_ALL
    $ pip install virtualenv
    Traceback (most recent call last):
      File "/usr/local/bin/pip", line 11, in <module>
        sys.exit(main())
      File "/usr/local/lib/python2.7/dist-packages/pip/__init__.py", line 215, in main
        locale.setlocale(locale.LC_ALL, '')
      File "/usr/lib/python2.7/locale.py", line 579, in setlocale
        return _setlocale(category, locale)
    locale.Error: unsupported locale setting
    $ export LC_ALL=C
    $ pip install virtualenv
    Requirement already satisfied (use --upgrade to upgrade): virtualenv in /usr/local/lib/python2.7/dist-packages

5
तो यह सिर्फ एक पर्यावरण चर स्थापित करने की बात है? क्या आप जानते हैं कि मैंने पहले कभी इसका सामना क्यों नहीं किया? क्या यह मान स्वचालित रूप से सेट नहीं होना चाहिए?
इरिकॉन

@ ऐरिक हाय, मैं अभी अपनी पोस्ट अपडेट करता हूं। यह समस्या मेरे कंप्यूटर पर python2.7 के साथ होती है।
रॉय

बहुत दिलचस्प है @ वास्तव में, मेरे पास 2 अन्य लगभग इंडेंटिकल-टू-इस-सर्वर सर्वर स्थापित हैं और वे पूरी तरह से ठीक काम कर रहे हैं
ericn

मैंने इसे letencrypt-auto का उपयोग करके सामना किया है, और export LC_ALL=Cमदद की है।
maniexx

10
यदि आप सोच रहे हैं कि LC_ALL=Cइसका क्या मतलब है, तो यहां देखें ।
गैरेट

41

निम्नलिखित कमांड चलाएँ (यह काम करेगा):

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

(-1) dpkg-reconfigureकमांड डेबियन आधारित सिस्टम पर उपयोग के लिए है। इस प्रश्न के साथ टैग किया गया है centos, एक RHEL व्युत्पन्न जो dpkg के लिए समर्थन प्रदान नहीं करता है जब तक कि आप epel-releaseरिपॉजिटरी को सक्षम नहीं करते हैं , और dpkg-devel& dpkg-devसंकुल को स्थापित करते हैं। फिर भी, यह एक आदर्श समाधान नहीं है।

30

किसी को यह उपयोगी लग सकता है। आप उन स्थानीय सेटिंग्स को .bashrc फ़ाइल में रख सकते हैं, जो आमतौर पर होम डायरेक्टरी में स्थित होती हैं।
बस इस आदेश को .bashrc में जोड़ें:
export LC_ALL=C
फिर टाइप source .bashrc
करें अब आपको हर बार इस कमांड को मैन्युअल रूप से कॉल करने की आवश्यकता नहीं है, जब आप उदाहरण के लिए ssh के माध्यम से कनेक्ट कर रहे हैं।


4

जब आप एक एनवी चर का निर्यात करने वाले लोकेल को सेट कर सकते हैं, तो आपको हर बार सत्र शुरू करने के लिए करना होगा। इस तरह एक लोकल सेट करने से समस्या का स्थायी समाधान हो जाएगा:

sudo apt-get install locales
sudo locale-gen en_US.UTF-8
sudo echo "LANG=en_US.UTF-8" > /etc/default/locale

क्या मैं गलत समझ रहा हूं, या आप sudoउसी लाइन का उपयोग कर रहे हैं जिसे आप इसे स्थापित करने का प्रयास करते हैं? sudo apt-get install ... sudo ...
साइबरएड

2
@CyberEd, आप सही कह रहे हैं, मैंने अनावश्यक निर्भरता को दूर करने के लिए उदाहरण संपादित किया है।
मार्को लवाग्निनो

3

[यह उत्तर केवल लिनक्स प्लेटफॉर्म पर लक्षित है]

पहली चीज जो आपको पता होनी चाहिए कि अधिकांश स्थानीय विन्यास फ़ाइल स्थित पथ से प्राप्त की जा सकती है localedef --help:

$ localedef --help | tail -n 5
System's directory for character maps : /usr/share/i18n/charmaps
                       repertoire maps: /usr/share/i18n/repertoiremaps
                       locale path    : /usr/lib/locale:/usr/share/i18n
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>

अंतिम देखें /usr/share/i18n? यह वह जगह है जहाँ आपका xx_XX.UTF-8 कॉन्फ़िगरेशन फ़ाइल स्थित है:

$ ls /usr/share/i18n/locales/zh_*
/usr/share/i18n/locales/zh_CN  /usr/share/i18n/locales/zh_HK  /usr/share/i18n/locales/zh_SG  /usr/share/i18n/locales/zh_TW

अब क्या ? हमें उन्हें संग्रह बाइनरी में संकलित करने की आवश्यकता है। एक तरह से, उदाहरण के लिए मान लें कि मेरे पास है /usr/share/i18n/locales/en_LOVE, मैं इसे संकलन सूची में जोड़ सकता हूं, अर्थात /etc/locale-genफ़ाइल:

$ tail -1 /etc/locale.gen 
en_LOVE.UTF-8 UTF-8

और इसे बाइनरी के साथ संकलित करें sudo locale-gen:

$ sudo locale-gen 
Generating locales (this might take a while)...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  ...
  en_LOVE.UTF-8... done
Generation complete.

और अब प्रणाली डिफ़ॉल्ट स्थान वांछित के साथ अद्यतन LANG, LC_ALL... इस के साथ आदि update-locale:

sudo update-locale LANG=en_LOVE.UTF-8

update-localeवास्तव में भी इस /etc/default/localeफाइल को अपडेट करने का मतलब है जो सिस्टम पर लॉगिन से सेटअप पर्यावरण चर पर स्रोत करेगा:

$ head /etc/default/locale 
#  File generated by update-locale
LANG=en_LOVE.UTF-8
LC_NUMERIC="en_US.UTF-8"
...

लेकिन हम प्रभावी होने के लिए रिबूट नहीं करना चाहते हैं, इसलिए हम इसे वर्तमान शेल सत्र में पर्यावरण चर के लिए स्रोत बना सकते हैं:

$ . /etc/default/locale

कैसे के बारे में sudo dpkg-reconfigure locales? यदि आप इसके चारों ओर खेलते हैं, तो आपको पता चल जाएगा कि यह कमांड मूल रूप से उपरोक्त चरणों को सरल बनाने के लिए GUI के रूप में कार्य करता है, अर्थात संपादित करें /etc/locale.gen->sudo locale-gen -> -sudo update-locale LANG=en_LOVE.UTF-8

अजगर के लिए, जब तक /etc/locale.genकि उस स्थानीय उम्मीदवार को शामिल किया जाता है और locale.genसंकलित किया जाता है, setlocale(category, locale)बिना फेंके काम करना चाहिए locale.Error: unsupoorted locale setting। आप फ़ाइल देख कर, सही स्ट्रिंग en_US.UTF-8/ en_US/....etcसेट करने के लिए जाँच कर सकते हैं , और फिर उसे वांछित मानकर संकलित कर सकते हैं। उस फ़ाइल में डॉट के बिना सही स्ट्रिंग का मतलब है और ।setlocale()/etc/locale.genzh_CN GB2312zh_CNzh_CN.GB2312


मेरी स्थिति के लिए, संक्षिप्त उत्तर है: 1. संपादित करें /etc/locale.gen, zh_CN.UTF-8लाइन को अनलाइक करें ; 2 sudo locale-gen.।
स्नोयोनियन


2

मेरे पास एक ही समस्या थी, और मेरे लिए काम नहीं किया"export LC_ALL=c"

कोशिश करो export LC_ALL="en_US.UTF-8"(यह काम करेगा)।


1

त्रुटि संदेश स्थानीय सेटिंग के साथ एक समस्या को इंगित करता है। इसे ठीक करने के लिए अन्य उत्तरों द्वारा बताए गए अनुसार आपको अपने स्थान को संशोधित करने की आवश्यकता है।

Mac OS X Sierra पर मैंने पाया कि ऐसा करने का सबसे अच्छा तरीका ~/bash_profileफ़ाइल को इस प्रकार संशोधित करना था :

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

जब तक आप उपयोग करके bash प्रोफ़ाइल को पुनः लोड नहीं करते हैं: यह परिवर्तन आपके वर्तमान cli सत्र में तुरंत स्पष्ट नहीं होगा source ~/.bash_profile

यह उत्तर उन उत्तरों के बहुत करीब है जो मैंने अन्य गैर-समरूप, गैर-डुप्लिकेट प्रश्नों (यानी पिपेनव से संबंधित नहीं) पर पोस्ट किए हैं, लेकिन उसी समाधान की आवश्यकता होती है।

मॉडरेटर को: सम्मान के साथ; मेरे पिछले उत्तर को इस कारण से हटा दिया गया था, लेकिन मुझे लगता है कि यह थोड़ा मूर्खतापूर्ण था क्योंकि वास्तव में यह जवाब लगभग तब लागू होता है जब त्रुटि "स्थान के साथ समस्या" होती है ... लेकिन कई अलग-अलग परिस्थितियां, भाषाएं और वातावरण हैं जो ट्रिगर हो सकते हैं वह त्रुटि।

इस प्रकार यह A) डुप्लिकेट के रूप में प्रश्नों को चिह्नित करने के लिए समझ में नहीं आता है और B) उत्तर को दर्जी बनाने से कोई मतलब नहीं है क्योंकि फिक्स बहुत सरल है, प्रत्येक मामले में एक ही है और अलंकरण से लाभ नहीं होता है।


1

उबंटू:

$ sudo vi /etc/default/locale

फ़ाइल के अंत में सेटिंग जोड़ें।

LC_ALL = en_US.UTF-8

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.