pip install - locale.Error: configuración regional no compatible

232

Traza completa de la pila:

  ~ 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

En el mismo servidor, ejecuté pip install virtualenvcon Python 2.7.x.

Ahora, acabo de instalar 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 arroja el mismo error también

ericn
fuente
2
¿Ya leíste esto ?
idjaw
sí, tengo @idjaw, nodo que es una cadena vacía en mi caso, es diferente de la configuración regional incorrecta que señaló
ericn
Sí, me di cuenta de eso. ¿Probaste el pkg-reconfigure?
idjaw
mi servidor es centos, no Ubuntu @idjaw, lo he comprobado y parece que no hay nada de malo en el localLANG=en_GB.utf8
ericn

Respuestas:

616

La causa raíz es: su variable de entorno LC_ALLfalta o no es válida de alguna manera

Respuesta corta-

solo ejecuta el siguiente comando:

$ export LC_ALL=C

Si sigue recibiendo el error en nuevas ventanas de terminal, agréguelo al final de su .bashrcarchivo.

Respuesta larga-

Aquí está mi localeconfiguración:

$ 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
fuente
55
entonces, ¿es solo cuestión de configurar una variable de entorno? ¿Sabes por qué nunca me he encontrado con esto antes? ¿No debería establecerse este valor automáticamente?
ericn
@eric Hola, acabo de actualizar mi publicación. Este problema ocurre con python2.7 en mi computadora.
ROY
de hecho, muy interesante @ROY, he configurado otros 2 servidores casi idénticos a este servidor y no han estado funcionando perfectamente bien
ericn
Encontré esto usando letsencrypt-auto y export LC_ALL=Cayudé.
maniexx
10
Si te preguntas qué LC_ALL=Csignifica, mira aquí .
Garrett
41

Ejecute el siguiente comando (funcionará):

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Rahi.Shah
fuente
(-1) El dpkg-reconfigurecomando está diseñado para su uso en sistemas basados ​​en Debian. Esta pregunta está etiquetada con centosun derivado RHEL que no proporciona soporte para dpkg a menos que habilite el epel-releaserepositorio e instale los paquetes dpkg-devel& dpkg-dev. Incluso entonces, esta no es una solución ideal.
30

Alguien puede encontrarlo útil. Puede poner esa configuración regional en el archivo .bashrc, que generalmente se encuentra en el directorio de inicio.
Simplemente agregue este comando en .bashrc:
export LC_ALL=C
luego escriba source .bashrc
Ahora no necesita llamar a este comando manualmente cada vez, cuando se conecta a través de ssh, por ejemplo.

Ivan Semochkin
fuente
4

Si bien puede configurar el entorno local exportando una variable env, deberá hacerlo cada vez que inicie una sesión. Establecer una configuración regional de esta manera resolverá el problema de forma 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
fuente
¿Estoy malinterpretando o estás usando sudoen la misma línea que intentas instalarlo? sudo apt-get install ... sudo ...
CyberEd
2
@ CyberEd, tienes razón, he editado el ejemplo para eliminar dependencias innecesarias.
Marco Lavagnino
3

[Esta respuesta es objetivo solo en la plataforma Linux]

Lo primero que debe saber es que la mayor parte de la ruta localizada del archivo de configuración local se puede obtener 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>

¿Ves el último /usr/share/i18n? Aquí es donde se encuentra el archivo de configuración 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

Ahora que ? Necesitamos compilarlos en archivo binario. Una de las formas, por ejemplo, supongo que sí /usr/share/i18n/locales/en_LOVE, puedo agregarlo a la lista de compilación, es decir, /etc/locale-genarchivo

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

Y compilarlo en 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.

Y ahora actualice la configuración regional predeterminada del sistema con la deseada LANG, LC_ALL... etc con esto update-locale:

sudo update-locale LANG=en_LOVE.UTF-8

update-localeen realidad también significa actualizar este /etc/default/localearchivo que se generará por sistema al iniciar sesión para configurar las variables de entorno:

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

Pero es posible que no queramos reiniciar para que surta efecto, por lo que podemos obtenerlo en la variable de entorno en la sesión de shell actual:

$ . /etc/default/locale

¿Qué tal sudo dpkg-reconfigure locales? Si juegas, sabrás que este comando básicamente actúa como GUI para simplificar los pasos anteriores, es decir, Editar /etc/locale.gen-> sudo locale-gen->sudo update-locale LANG=en_LOVE.UTF-8

Para python, siempre que /etc/locale.gencontenga ese candidato de configuración regional y locale.gense compile, setlocale(category, locale)debería funcionar sin lanzamientos locale.Error: unsupoorted locale setting. Puede verificar la cadena correcta en_US.UTF-8/ en_US/....etcque se establecerá setlocale(), observando el /etc/locale.genarchivo, y luego descomentarlo y compilarlo como desee. zh_CN GB2312sin punto en ese archivo significa que la cadena correcta es zh_CNy zh_CN.GB2312.

Fruta
fuente
Para mi situación, la respuesta corta es: 1. editar /etc/locale.gen, descomentar la zh_CN.UTF-8línea; 2 sudo locale-gen..
SnowOnion
2

Tuve el mismo problema y no funcionó para mí ."export LC_ALL=c"

Intenta export LC_ALL="en_US.UTF-8"(funcionará).

Benyamin Jafari
fuente
1

El mensaje de error indica un problema con la configuración regional. Para solucionar esto como lo indican otras respuestas, debe modificar su configuración regional.

En Mac OS X Sierra descubrí que la mejor manera de hacerlo era modificar el ~/bash_profilearchivo de la siguiente manera:

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

Este cambio no será inmediatamente evidente en la sesión de CLI actual a menos que vuelva a cargar el perfil de bash utilizando: source ~/.bash_profile.

Esta respuesta está bastante cerca de las respuestas que he publicado en otras preguntas no idénticas, no duplicadas (es decir, no relacionadas con pipenv) pero que requieren la misma solución.

Al moderador: Con respeto; mi respuesta anterior se eliminó por esta razón, pero creo que fue un poco tonto porque realmente esta respuesta se aplica casi siempre que el error es "problema con la configuración regional" ... pero hay una serie de situaciones, idiomas y entornos diferentes que podrían desencadenar ese error

Por lo tanto, A) no tiene sentido marcar las preguntas como duplicadas y B) tampoco tiene sentido adaptar la respuesta porque la solución es muy simple, es la misma en cada caso y no se beneficia de la ornamentación.

geodésico
fuente
1

Ubuntu:

$ sudo vi /etc/default/locale

Agregue la siguiente configuración al final del archivo.

LC_ALL = en_US.UTF-8

saneryee
fuente