pip install - yerel ayar: Hata: desteklenmeyen yerel ayar


232

Tam yığın izleme:

  ~ 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

Aynı sunucuda pip install virtualenvpython 2.7.x ile başarılı bir şekilde çalıştım.

Şimdi, python3.4'ü kullanarak yeni kurdum 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 aynı hatayı da atar


2
Eğer okudun bu henüz?
idjaw

evet @idjaw, düğüm benim durumumda boş bir dize var, işaret ettiğin yanlış
yerelden

Evet, fark ettim. Pkg-yeniden yapılandırmayı denediniz mi?
idjaw

sunucum centos değil, Ubuntu @idjaw değil, kontrol ettim ve yerel ile yanlış bir şey yok gibi görünüyorLANG=en_GB.utf8
ericn

Yanıtlar:


616

Temel neden: ortam değişkeniniz LC_ALLeksik veya geçersiz

Kısa cevap-

sadece aşağıdaki komutu çalıştırın:

$ export LC_ALL=C

Hatayı yeni terminal pencerelerinde almaya devam ederseniz, bunu .bashrcdosyanızın altına ekleyin .

Uzun cevap-

İşte localeayarlarım:

$ 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
o zaman bu sadece bir ortam değişkeni kurmak meselesi? Neden daha önce hiç karşılaşmadım biliyor musun? Bu değer otomatik olarak ayarlanmamalı mı?
ericn

@eric Merhaba, yazımı güncelliyorum. Bu sorun, bilgisayarımda python2.7 ile olur.
ROY

çok ilginç @ROY, 2 sunucuya neredeyse girintili-sunucu-sunucuları kurdum ve mükemmel çalışıyorlardı
ericn

Bunu letsencrypt-auto kullanarak karşılaştım ve export LC_ALL=Cyardımcı oldum .
maniexx

10
Ne LC_ALL=Canlama geldiğini merak ediyorsanız , buraya bakın .
Garrett

41

Aşağıdaki komutu çalıştırın (çalışacaktır):

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

(-1) dpkg-reconfigureKomut, Debian tabanlı sistemlerde kullanılmak üzere tasarlanmıştır. Bu soru, depoyu centosetkinleştirip & paketlerini epel-releaseyüklemediğiniz sürece dpkg için destek sağlamayan bir RHEL türevi ile etiketlenir . O zaman bile, bu ideal bir çözüm değil. dpkg-develdpkg-dev

30

Birisi faydalı bulabilir. Bu yerel ayarları genellikle giriş dizininde bulunan .bashrc dosyasına koyabilirsiniz.
Sadece .bashrc içinde bu komutu ekleyin:
export LC_ALL=C
sonra yazın source .bashrc
örneğin ssh ile bağlanırken, her seferinde el bu komutu aramaya gerek yok şimdi.


4

Bir env değişkenini dışa aktarırken yerel ayarı ayarlayabilirsiniz, ancak her oturum başlattığınızda bunu yapmanız gerekir. Bir yerel ayarın bu şekilde yapılması sorunu kalıcı olarak çözecektir:

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

Yanlış anlıyor muyum yoksa sudoyüklemeye çalıştığınız satırda mı kullanıyorsunuz ? sudo apt-get install ... sudo ...
CyberEd

2
@CyberEd, haklısın, gereksiz bağımlılıkları kaldırmak için örneği düzenledim.
Marco Lavagnino

3

[Bu cevap yalnızca linux platformunda hedeftir]

Bilmeniz gereken ilk şey, yerel ayar dosyasının bulunduğu yolun çoğunun şu adresten alınabileceği 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>

Sonuncusunu /usr/share/i18ngördün mü? Xx_XX.UTF-8 yapılandırma dosyanızın bulunduğu yer:

$ 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

Şimdi ne olacak ? Onları arşiv ikili dosyasında derlememiz gerekiyor. Yollardan biri, örneğin varsayalım /usr/share/i18n/locales/en_LOVE, derleme listesine, yani /etc/locale-gendosya ekleyebilirsiniz :

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

Ve ikili dosya ile derleyin 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.

Ve şimdi sistem varsayılan yerel ayarını istediğiniz LANG, LC_ALL... vb. İle güncelleyin update-locale:

sudo update-locale LANG=en_LOVE.UTF-8

update-localeaslında /etc/default/localekurulum ortam değişkenlerine girişte sistem tarafından kaynaklanacak olan bu dosyayı güncellemek anlamına gelir :

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

Ancak yürürlüğe girmek için yeniden başlatmak istemeyebiliriz, bu yüzden sadece geçerli kabuk oturumunda ortam değişkenine kaynak yapabiliriz:

$ . /etc/default/locale

Nasıl sudo dpkg-reconfigure locales? Etrafında oynarsanız, bu komutun temel olarak yukarıdaki adımları basitleştirmek için GUI olarak hareket ettiğini bilirsiniz, yani Düzenle /etc/locale.gen-> sudo locale-gen->sudo update-locale LANG=en_LOVE.UTF-8

Python için, /etc/locale.genbu yerel aday ve locale.genderleme içerdiği sürece , atılmadan setlocale(category, locale)çalışmalıdır locale.Error: unsupoorted locale setting. Dosyayı gözlemleyerek, içinde ayarlanacak doğru dizeyi en_US.UTF-8/ kontrol edebilir ve ardından açıp kapatabilirsiniz ve istediğiniz gibi derleyebilirsiniz. bu dosyada nokta olmadan doğru dize ve anlamına gelir .en_US/....etcsetlocale()/etc/locale.genzh_CN GB2312zh_CNzh_CN.GB2312


Benim durumum için, kısa cevap: 1. düzenlemek /etc/locale.gen, zh_CN.UTF-8çizgi uncomment ; 2. sudo locale-gen.
SnowOnion


2

Aynı sorunu yaşadım ve benim için çalışmadı ."export LC_ALL=c"

Deneyin export LC_ALL="en_US.UTF-8"(işe yarayacak).


1

Hata iletisi, yerel ayarda bir sorun olduğunu gösterir. Bunu diğer yanıtlarla gösterildiği gibi düzeltmek için yerel ayarınızı değiştirmeniz gerekir.

Mac OS X Sierra'da bunu yapmanın en iyi yolunun ~/bash_profiledosyayı aşağıdaki gibi değiştirmek olduğunu buldum :

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

Eğer bash profilini: kullanarak yeniden yüklemezseniz, bu değişiklik mevcut cli oturumunuzda hemen görülmeyecektir source ~/.bash_profile.

Bu cevap, özdeş olmayan, yinelenmeyen diğer sorulara (yani pipenv ile ilgili olmayan) gönderdiğim ancak aynı çözümü gerektiren cevaplara oldukça yakındır.

Moderatöre: Saygı ile; önceki cevabım bu nedenle silindi ama bunun biraz aptalca olduğunu hissediyorum çünkü bu cevap neredeyse hata "yerel ayarla ilgili sorun" olduğunda neredeyse geçerlidir ... ancak tetikleyebilecek farklı durumlar, diller ve ortamlar vardır bu hata.

Bu yüzden A) soruları kopyalar olarak işaretlemek mantıklı değildir ve B) yanıtı uyarlamak mantıklı değildir, çünkü düzeltme çok basittir, her durumda aynıdır ve süslemeden faydalanmamaktadır.


1

Ubuntu:

$ sudo vi /etc/default/locale

Dosyanın sonuna aşağıdaki ayarı ekleyin.

LC_ALL = en_US.UTF-8

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.