Plein stacktrace:
➜ ~ 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 à exécuter pip install virtualenv
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
génère également la même erreur
La cause première est: votre variable d'environnement LC_ALL
est manquante ou invalide
Réponse courte-
il suffit de lancer la commande suivante:
$ export LC_ALL=C
Si l'erreur persiste dans les nouvelles fenêtres de terminal, ajoutez-la au bas de votre fichier .bashrc
.
Longue réponse-
Voici mes paramètres 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
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
Quelqu'un peut le trouver utile. Vous pouvez placer ces paramètres régionaux dans le fichier .bashrc, qui se trouve généralement dans le répertoire de base.
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, par exemple lorsque vous vous connectez via ssh.
Bien que vous puissiez définir les paramètres régionaux exportant une variable env, vous devrez le faire chaque fois que vous démarrez une session. Définir les paramètres régionaux de cette manière 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
Pour Dockerfile, cela fonctionne pour moi:
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
Comment installer locale-gen?
[Cette réponse concerne uniquement la plate-forme Linux]
La première chose que vous devez savoir est que la plupart du chemin du fichier de configuration de la 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 ici 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 dans un binaire d'archive. Un des moyens, par exemple supposons que j'ai /usr/share/i18n/locales/en_LOVE
, je peux l'ajouter à la liste de compilation, c'est-à-dire le fichier /etc/locale-gen
:
$ 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 la LANG
, LC_ALL
... etc. désirée avec ce update-locale
:
Sudo update-locale LANG=en_LOVE.UTF-8
update-locale
signifie également mettre à jour ce fichier /etc/default/locale
qui sera source par le système lors de la connexion aux variables d’environnement d’installation:
$ head /etc/default/locale
# File generated by update-locale
LANG=en_LOVE.UTF-8
LC_NUMERIC="en_US.UTF-8"
...
Mais nous ne voudrons peut-être pas redémarrer pour prendre effet, nous pouvons donc nous en servir pour la variable d’environnement de la session Shell en cours:
$ . /etc/default/locale
Que diriez-vous de Sudo dpkg-reconfigure locales
? Si vous y réfléchissez, vous saurez que cette commande sert essentiellement d’interface graphique pour simplifier les étapes ci-dessus, c.-à-d. Editer /etc/locale.gen
-> Sudo locale-gen
-> Sudo update-locale LANG=en_LOVE.UTF-8
Pour python, tant que /etc/locale.gen
contient ce candidat de locale et que locale.gen
soit compilé, setlocale(category, locale)
devrait fonctionner sans jets locale.Error: unsupoorted locale setting
. Vous pouvez vérifier que la chaîne correcte en_US.UTF-8
/en_US/....etc
doit être définie dans setlocale()
, en observant le fichier /etc/locale.gen
, puis en supprimant le commentaire et en le compilant comme vous le souhaitez. zh_CN GB2312
sans point dans ce fichier signifie que la chaîne correcte est zh_CN
et zh_CN.GB2312
.
J'ai le même problème, et"export LC_ALL=c"
ne fonctionne pas pour moi ,
Essayezexport LC_ALL="en_US.UTF-8"
(cela fonctionnera).
Le message d'erreur indique un problème avec les 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 consistait à modifier le fichier ~/bash_profile
comme suit:
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
Cette modification ne sera pas immédiatement évidente dans votre session Cli actuelle, à moins que vous ne rechargiez le profil bash à l'aide de: 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 j'estime que c'était un peu ridicule, car cette réponse s'applique presque toujours lorsque l'erreur est "un problème de paramètres régionaux" ... cette erreur.
Ainsi, 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, car le correctif est très simple, est identique dans tous les cas et ne bénéficie pas de décoration.
Ubuntu:
$ Sudo vi /etc/default/locale
Ajouter le paramètre ci-dessous à la fin du fichier.
LC_ALL = en_US.UTF-8