pip install - locale.Error: Nicht unterstützte Gebietsschemaeinstellung

232

Vollständige Stapelverfolgung:

  ~ 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

Auf demselben Server wurde ich erfolgreich pip install virtualenvmit Python 2.7.x ausgeführt.

Jetzt habe ich gerade Python3.4 mit installiert 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 wirft auch den gleichen Fehler

ericn
quelle
2
Lasen Sie das noch?
Idjaw
Ja, ich habe @idjaw, Knoten, dass es in meinem Fall eine leere Zeichenfolge ist. Es unterscheidet sich von dem falschen Gebietsschema, auf das Sie hingewiesen haben
Ericic
Ja, das habe ich bemerkt. Haben Sie die pkg-Neukonfiguration versucht?
Idjaw
Mein Server ist Centos, nicht Ubuntu @idjaw, ich habe es überprüft und es scheint nichts falsch mit dem lokalen zu sein, es istLANG=en_GB.utf8
ericn

Antworten:

616

Die Hauptursache ist: Ihre Umgebungsvariable LC_ALLfehlt oder ist irgendwie ungültig

Kurze Antwort-

Führen Sie einfach den folgenden Befehl aus:

$ export LC_ALL=C

Wenn der Fehler in neuen Terminalfenstern weiterhin angezeigt wird, fügen Sie ihn am Ende Ihrer .bashrcDatei hinzu.

Lange Antwort-

Hier sind meine localeEinstellungen:

$ 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
ROY
quelle
5
Es geht also nur darum, eine Umgebungsvariable einzurichten? Weißt du, warum ich das noch nie erlebt habe? Sollte dieser Wert nicht automatisch eingestellt werden?
Ericic
@eric Hallo, ich aktualisiere gerade meinen Beitrag. Dieses Problem tritt bei python2.7 auf meinem Computer auf.
ROY
Sehr interessant in der Tat @ROY, ich habe 2 andere Server, die für diesen Server fast identisch sind, eingerichtet und sie haben einwandfrei funktioniert
Ericic
Ich bin mit letsencrypt-auto darauf gestoßen und habe export LC_ALL=Cgeholfen.
Maniexx
10
Wenn Sie sich fragen, was das LC_ALL=Cbedeutet, lesen Sie hier .
Garrett
41

Führen Sie den folgenden Befehl aus (es wird funktionieren):

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Rahi.Shah
quelle
(-1) Der dpkg-reconfigureBefehl ist für die Verwendung auf Debian-basierten Systemen vorgesehen. Diese Frage ist mit centoseinem RHEL-Derivat gekennzeichnet, das dpkg nur unterstützt, wenn Sie das epel-releaseRepository aktivieren und die dpkg-devel& dpkg-dev-Pakete installieren . Selbst dann ist dies keine ideale Lösung.
30

Jemand könnte es nützlich finden. Sie können diese Gebietsschemaeinstellungen in die .bashrc-Datei einfügen, die sich normalerweise im Ausgangsverzeichnis befindet.
Fügen Sie diesen Befehl einfach in .bashrc hinzu: Geben Sie
export LC_ALL=C
dann source .bashrc
Now ein. Sie müssen diesen Befehl nicht jedes Mal manuell aufrufen, wenn Sie beispielsweise eine Verbindung über ssh herstellen.

Ivan Semochkin
quelle
4

Während Sie das Gebietsschema festlegen können, das eine env-Variable exportiert, müssen Sie dies jedes Mal tun, wenn Sie eine Sitzung starten. Wenn Sie auf diese Weise ein Gebietsschema festlegen, wird das Problem dauerhaft gelöst:

sudo apt-get install locales
sudo locale-gen en_US.UTF-8
sudo echo "LANG=en_US.UTF-8" > /etc/default/locale
Marco Lavagnino
quelle
Verstehe ich das falsch oder verwenden Sie sudodieselbe Zeile, in der Sie versuchen, sie zu installieren? sudo apt-get install ... sudo ...
CyberEd
2
@CyberEd, Sie haben Recht, ich habe das Beispiel bearbeitet, um nicht benötigte Abhängigkeiten zu entfernen.
Marco Lavagnino
3

[Diese Antwort ist nur auf der Linux-Plattform verfügbar]

Das erste, was Sie wissen sollten, ist, dass der größte Teil des Pfads der Gebietsschema-Konfigurationsdatei von folgender Adresse abgerufen werden kann 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>

Sehen Sie den letzten /usr/share/i18n? Hier befindet sich Ihre xx_XX.UTF-8-Konfigurationsdatei:

$ 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

Was jetzt ? Wir müssen sie in Archivbinär kompilieren. Eine der Möglichkeiten, z. B. anzunehmen, dass ich sie habe /usr/share/i18n/locales/en_LOVE, kann ich in die Kompilierungsliste aufnehmen, dh /etc/locale-genDatei:

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

Und kompilieren Sie es binär mit 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.

Und jetzt aktualisieren Sie das Standardgebietsschema des Systems mit dem gewünschten LANG, LC_ALL... usw. damit update-locale:

sudo update-locale LANG=en_LOVE.UTF-8

update-localebedeutet eigentlich auch, diese /etc/default/localeDatei zu aktualisieren , die beim Anmelden vom System als Quelle für die Einrichtung von Umgebungsvariablen verwendet wird:

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

Möglicherweise möchten wir jedoch keinen Neustart durchführen, damit er wirksam wird. Daher können wir ihn einfach in der aktuellen Shell-Sitzung als Umgebungsvariable verwenden:

$ . /etc/default/locale

Wie wäre es sudo dpkg-reconfigure locales? Wenn Sie damit herumspielen, wissen Sie, dass dieser Befehl im Wesentlichen als GUI fungiert, um die obigen Schritte zu vereinfachen, dh Bearbeiten /etc/locale.gen-> sudo locale-gen->sudo update-locale LANG=en_LOVE.UTF-8

Für Python sollte es funktionieren , solange es /etc/locale.gendiesen Gebietsschemakandidaten enthält und locale.genkompiliert wird . Sie können die richtige Zeichenfolge überprüfen / nur eingestellt werden , durch Beobachtung Datei und dann uncomment und kompilieren Sie es wie gewünscht. ohne Punkt in dieser Datei bedeutet, dass die richtige Zeichenfolge und ist .setlocale(category, locale)locale.Error: unsupoorted locale settingen_US.UTF-8en_US/....etcsetlocale()/etc/locale.genzh_CN GB2312zh_CNzh_CN.GB2312

Obst
quelle
Für meine Situation lautet die kurze Antwort: 1. Bearbeiten /etc/locale.gen, kommentieren Sie die zh_CN.UTF-8Zeile aus; 2 sudo locale-gen..
SnowOnion
2

Ich hatte das gleiche Problem und arbeitete nicht für mich ."export LC_ALL=c"

Versuchen Sie es export LC_ALL="en_US.UTF-8"(es wird funktionieren).

Benyamin Jafari
quelle
1

Die Fehlermeldung weist auf ein Problem mit der Ländereinstellung hin. Um dies zu beheben, wie in anderen Antworten angegeben, müssen Sie Ihr Gebietsschema ändern.

Unter Mac OS X Sierra stellte ich fest, dass der beste Weg, dies zu tun, darin bestand, die ~/bash_profileDatei wie folgt zu ändern :

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

Diese Änderung wird in Ihrer aktuellen CLI-Sitzung nicht sofort sichtbar, es sei denn, Sie laden das Bash-Profil mithilfe von : source ~/.bash_profile.

Diese Antwort kommt den Antworten ziemlich nahe, die ich auf andere nicht identische, nicht doppelte Fragen (dh nicht im Zusammenhang mit pipenv) gepostet habe, für die jedoch dieselbe Lösung erforderlich ist.

An den Moderator: Mit Respekt; Meine vorherige Antwort wurde aus diesem Grund gelöscht, aber ich finde das etwas albern, weil diese Antwort wirklich fast immer dann zutrifft, wenn der Fehler "Problem mit dem Gebietsschema" ist ... aber es gibt eine Reihe unterschiedlicher Situationen, Sprachen und Umgebungen, die ausgelöst werden könnten dieser Fehler.

Daher ist es A) nicht sinnvoll, die Fragen als Duplikate zu markieren, und B) auch nicht sinnvoll, die Antwort anzupassen, da die Korrektur sehr einfach ist, in jedem Fall dieselbe ist und nicht von Ornamenten profitiert.

geoidesic
quelle
1

Ubuntu:

$ sudo vi /etc/default/locale

Fügen Sie die folgende Einstellung am Ende der Datei hinzu.

LC_ALL = en_US.UTF-8

saneryee
quelle