installation de pip - locale.Error: paramètre de locale non pris en charge

232

Trace de pile complète:

  ~ 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

Sur le même serveur, j'ai réussi pip install virtualenvà exécuter avec python 2.7.x.

Maintenant, je viens d'installer python3.4 en utilisant 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 jette la même erreur aussi

Ericn
la source
2
Avez - vous lu ce encore?
idjaw
oui j'ai @idjaw, noeud que c'est une chaîne vide dans mon cas, c'est différent du mauvais endroit que vous avez signalé
ericn
Ouais, je l'ai remarqué. Avez-vous essayé le pkg-reconfigure?
idjaw
mon serveur est centos, pas Ubuntu @idjaw, j'ai vérifié et il n'y a rien de mal avec le local c'estLANG=en_GB.utf8
ericn

Réponses:

616

La cause première est: votre variable d'environnement LC_ALLest manquante ou invalide d'une manière ou d'une autre

Réponse courte-

exécutez simplement la commande suivante:

$ export LC_ALL=C

Si vous continuez à obtenir l'erreur dans de nouvelles fenêtres de terminal, ajoutez-la au bas de votre .bashrcfichier.

Longue réponse-

Voici mes localeparamètres:

$ 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
la source
5
il s'agit donc simplement de configurer une variable d'environnement? Savez-vous pourquoi je n'ai jamais rencontré cela auparavant? Cette valeur ne doit-elle pas être définie automatiquement?
Eric
@eric Salut, je viens de mettre à jour mon message. Ce problème se produit avec python2.7 sur mon ordinateur.
ROY
très intéressant en effet @ROY, j'ai eu 2 autres serveurs presque identiques à ce serveur installés et ils ont parfaitement fonctionné
ericn
J'ai rencontré cela en utilisant letsencrypt-auto, et j'ai export LC_ALL=Caidé.
maniexx
10
Si vous vous demandez ce que cela LC_ALL=Csignifie, voyez ici .
Garrett
41

Exécutez la commande suivante (cela fonctionnera):

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Rahi.Shah
la source
(-1) La dpkg-reconfigurecommande est destinée à être utilisée sur les systèmes basés sur Debian. Cette question est étiquetée avec centos, un dérivé de RHEL qui ne prend pas en charge dpkg sauf si vous activez le epel-releaseréférentiel et installez les packages dpkg-devel& dpkg-dev. Même alors, ce n'est pas une solution idéale.
30

Quelqu'un peut trouver cela utile. Vous pouvez placer ces paramètres régionaux dans le fichier .bashrc, qui se trouve généralement dans le répertoire personnel.
Ajoutez simplement cette commande dans .bashrc:
export LC_ALL=C
puis tapez source .bashrc
Maintenant, vous n'avez pas besoin d'appeler cette commande manuellement à chaque fois, lorsque vous vous connectez via ssh par exemple.

Ivan Semochkin
la source
4

Bien que vous puissiez définir les paramètres régionaux pour exporter une variable env, vous devrez le faire chaque fois que vous démarrez une session. Définir une locale de cette façon résoudra le problème de manière permanente:

sudo apt-get install locales
sudo locale-gen en_US.UTF-8
sudo echo "LANG=en_US.UTF-8" > /etc/default/locale
Marco Lavagnino
la source
Suis-je un malentendu, ou utilisez-vous sudosur la même ligne que vous essayez de l'installer? sudo apt-get install ... sudo ...
CyberEd
2
@CyberEd, vous avez raison, j'ai édité l'exemple pour supprimer les dépendances inutiles.
Marco Lavagnino
3

[Cette réponse est uniquement destinée à la plate-forme Linux]

La première chose que vous devez savoir est que la plupart du chemin localisé du fichier de configuration locale peut être obtenu à partir de 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>

Voir le dernier /usr/share/i18n? C'est là que se trouve votre fichier de configuration 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

Maintenant quoi ? Nous devons les compiler en archive binaire. L'un des moyens, par exemple supposons que je l'ai /usr/share/i18n/locales/en_LOVE, je peux l'ajouter dans la liste de compilation, c'est-à-dire le /etc/locale-genfichier:

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

Et compilez-le en binaire avec 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.

Et maintenant, mettez à jour les paramètres régionaux par défaut du système avec les souhaits LANG, LC_ALL... etc avec ceci update-locale:

sudo update-locale LANG=en_LOVE.UTF-8

update-localesignifie également mettre à jour ce /etc/default/localefichier qui se source par le système lors de la connexion pour configurer les variables d'environnement:

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

Mais nous ne souhaitons peut-être pas redémarrer pour prendre effet, nous pouvons donc simplement le source dans la variable d'environnement dans la session shell actuelle:

$ . /etc/default/locale

Et alors sudo dpkg-reconfigure locales? Si vous y jouez, vous saurez que cette commande agit essentiellement comme une interface graphique pour simplifier les étapes ci-dessus, c'est-à-dire Édition /etc/locale.gen-> sudo locale-gen->sudo update-locale LANG=en_LOVE.UTF-8

Pour python, tant qu'il /etc/locale.gencontient ce candidat local et locale.genqu'il est compilé, il setlocale(category, locale)devrait fonctionner sans lancer locale.Error: unsupoorted locale setting. Vous pouvez vérifier la chaîne correcte en_US.UTF-8/ en_US/....etcà définir setlocale(), en observant le /etc/locale.genfichier, puis décommenter et compiler comme vous le souhaitez. zh_CN GB2312sans point dans ce fichier signifie que la chaîne correcte est zh_CNet zh_CN.GB2312.

Fruit
la source
Pour ma situation, la réponse courte est: 1. éditez /etc/locale.gen, décommentez la zh_CN.UTF-8ligne; 2 sudo locale-gen..
SnowOnion
2

J'ai eu le même problème et je n'ai pas travaillé pour moi ."export LC_ALL=c"

Essayez export LC_ALL="en_US.UTF-8"(cela fonctionnera).

Benyamin Jafari
la source
1

Le message d'erreur indique un problème avec le paramètre de paramètres régionaux. Pour résoudre ce problème, comme indiqué par d'autres réponses, vous devez modifier vos paramètres régionaux.

Sur Mac OS X Sierra, j'ai constaté que la meilleure façon de procéder était de modifier le ~/bash_profilefichier comme suit:

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

Ce changement ne sera pas immédiatement évidente dans votre session de cli actuelle à moins que vous rechargerez le profil bash en utilisant: source ~/.bash_profile.

Cette réponse est assez proche des réponses que j'ai postées à d'autres questions non identiques et non dupliquées (c'est-à-dire non liées à pipenv) mais qui nécessitent la même solution.

Au modérateur: Avec respect; ma réponse précédente a été supprimée pour cette raison, mais je pense que c'était un peu idiot car vraiment cette réponse s'applique presque chaque fois que l'erreur est "un problème avec les paramètres régionaux" ... mais il existe un certain nombre de situations, de langues et d'environnements différents qui pourraient déclencher cette erreur.

Ainsi, il A) n'a pas de sens de marquer les questions comme des doublons et B) n'a pas de sens d'adapter la réponse non plus parce que le correctif est très simple, est le même dans chaque cas et ne bénéficie pas d'ornementation.

géoidesic
la source
1

Ubuntu:

$ sudo vi /etc/default/locale

Ajoutez le paramètre ci-dessous à la fin du fichier.

LC_ALL = en_US.UTF-8

saneryee
la source