pip install - locale.Error: impostazione locale non supportata


232

Stack stack completo:

  ~ 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

Sullo stesso server, ho eseguito pip install virtualenvcon successo con Python 2.7.x.

Ora, ho appena installato python3.4 usando 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 genera anche lo stesso errore


2
Hai già letto questo ?
idjaw

sì, ho @idjaw, nodo nel mio caso è una stringa vuota, diversa dalla locale sbagliata che hai sottolineato
ericn

Sì, l'ho notato. Hai provato la pkg-reconfigure?
idjaw

il mio server è centos, non Ubuntu @idjaw, ho controllato e sembra che non ci sia nulla di sbagliato nel localeLANG=en_GB.utf8
ericn

Risposte:


616

La causa principale è: la variabile di ambiente LC_ALLè mancante o non valida in qualche modo

Risposta breve-

basta eseguire il seguente comando:

$ export LC_ALL=C

Se continui a ricevere l'errore nelle nuove finestre del terminale, aggiungilo nella parte inferiore del .bashrcfile.

Risposta lunga-

Ecco le mie localeimpostazioni:

$ 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
quindi è solo questione di impostare una variabile d'ambiente allora? Sai perché non l'ho mai visto prima? Questo valore non dovrebbe essere impostato automaticamente?
ericn,

@eric Ciao, ho appena aggiornato il mio post. Questo problema si verifica con python2.7 sul mio computer.
ROY

molto interessante davvero @ROY, ho installato altri 2 server quasi identici a questo server e hanno funzionato perfettamente
ericn

L'ho riscontrato usando letsencrypt-auto e mi ha export LC_ALL=Caiutato.
maniexx,

10
Se ti stai chiedendo cosa LC_ALL=Csignifichi, vedi qui .
Garrett,

41

Esegui il seguente comando (funzionerà):

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

(-1) Il dpkg-reconfigurecomando è destinato all'uso su sistemi basati su Debian. Questa domanda è contrassegnata con centos, un derivato RHEL che non fornisce supporto per dpkg a meno che non si abiliti il epel-releaserepository e installi i pacchetti dpkg-devel& dpkg-dev. Anche allora, questa non è una soluzione ideale.

30

Qualcuno potrebbe trovarlo utile. È possibile inserire tali impostazioni locali nel file .bashrc, che di solito si trova nella home directory.
Basta aggiungere questo comando in .bashrc:
export LC_ALL=C
quindi digitare source .bashrc
Ora non è necessario chiamare questo comando manualmente ogni volta, ad esempio quando ci si connette tramite ssh.


4

Mentre è possibile impostare le impostazioni internazionali esportando una variabile env, è necessario farlo ogni volta che si avvia una sessione. L'impostazione di una locale in questo modo risolverà il problema in modo permanente:

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

Sto fraintendendo o stai usando sudosulla stessa linea che provi a installarlo? sudo apt-get install ... sudo ...
CyberEd,

2
@CyberEd, hai ragione, ho modificato l'esempio per rimuovere le dipendenze non necessarie.
Marco Lavagnino,

3

[Questa risposta è target solo su piattaforma linux]

La prima cosa che dovresti sapere è che la maggior parte del percorso di configurazione del file di configurazione locale può essere ottenuto da 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>

Vedi l'ultimo /usr/share/i18n? Qui è dove si trova il tuo file di configurazione 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

E adesso? Dobbiamo compilarli in un archivio binario. Uno dei modi, ad esempio supponiamo di averlo /usr/share/i18n/locales/en_LOVE, posso aggiungerlo all'elenco di compilazione, ovvero al /etc/locale-genfile:

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

E compilarlo in binario con 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.

E ora aggiorna le impostazioni internazionali predefinite del sistema con desiderato LANG, LC_ALLecc. Ecc. Con questo update-locale:

sudo update-locale LANG=en_LOVE.UTF-8

update-localein realtà significa anche aggiornare questo /etc/default/localefile che verrà sorgente dal sistema all'accesso per impostare le variabili di ambiente:

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

Ma potremmo non voler riavviare per rendere effettivi, quindi possiamo semplicemente sorgente alla variabile d'ambiente nella sessione di shell corrente:

$ . /etc/default/locale

Che ne dici sudo dpkg-reconfigure locales? Se ci giochi, saprai che questo comando agisce sostanzialmente come GUI per semplificare i passaggi precedenti, ovvero Modifica /etc/locale.gen-> sudo locale-gen->sudo update-locale LANG=en_LOVE.UTF-8

Per python, purché /etc/locale.gencontenga quel candidato locale e venga locale.gencompilato, setlocale(category, locale)dovrebbe funzionare senza lanci locale.Error: unsupoorted locale setting. È possibile controllare la stringa corretta en_US.UTF-8/ en_US/....etcda impostare setlocale(), osservando il /etc/locale.genfile, quindi decommentare e compilarlo come desiderato. zh_CN GB2312senza punto in quel file significa che la stringa corretta è zh_CNe zh_CN.GB2312.


Per la mia situazione, la risposta breve è: 1. modifica /etc/locale.gen, decommenta la zh_CN.UTF-8riga; 2 sudo locale-gen.
SnowOnion


2

Ho avuto lo stesso problema e non ha funzionato per me ."export LC_ALL=c"

Prova export LC_ALL="en_US.UTF-8"(funzionerà).


1

Il messaggio di errore indica un problema con le impostazioni locali. Per risolvere questo problema, come indicato da altre risposte, è necessario modificare le impostazioni internazionali.

Su Mac OS X Sierra ho scoperto che il modo migliore per farlo era modificare il ~/bash_profilefile come segue:

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

Questo cambiamento non sarà subito evidente nella sessione cli corrente a meno che non si ricarica il profilo bash utilizzando: source ~/.bash_profile.

Questa risposta è abbastanza vicina alle risposte che ho pubblicato per altre domande non identiche, non duplicate (cioè non correlate a pipenv) ma che richiedono la stessa soluzione.

Al moderatore: con rispetto; la mia risposta precedente è stata cancellata per questo motivo, ma mi sembra un po 'sciocco perché in realtà questa risposta si applica quasi ogni volta che l'errore è "problema con le impostazioni locali" ... ma ci sono diverse situazioni, lingue e ambienti che potrebbero innescare quell'errore.

Quindi A) non ha senso contrassegnare le domande come duplicati e B) non ha senso adattare la risposta o perché la correzione è molto semplice, è la stessa in ogni caso e non beneficia di ornamenti.


1

Ubuntu:

$ sudo vi /etc/default/locale

Aggiungi le impostazioni seguenti alla fine del file.

LC_ALL = en_US.UTF-8

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.