it-swarm.com.ru

pip install - locale.Error: неподдерживаемая настройка локали

Полная трассировка стека: 

➜  ~ 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

На том же сервере я успешно запустил pip install virtualenv с python 2.7.x. 

Теперь я только что установил python3.4, используя 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 тоже выдает такую ​​же ошибку

185
ericn

Основная причина: ваша переменная окружения LC_ALL отсутствует или недействительна каким-то образом 

Короткий ответ-  

просто запустите следующую команду:

$ export LC_ALL=C

Если вы продолжаете получать сообщение об ошибке в новых окнах терминала, добавьте его внизу файла .bashrc.

Длинный ответ-

Вот мои настройки 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
497
ROY

Запустите следующую команду (она будет работать):

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
Sudo dpkg-reconfigure locales
30
Rahi.Shah

Кто-то может найти это полезным. Вы можете поместить эти настройки локали в файл .bashrc, который обычно находится в домашнем каталоге.
Просто добавьте эту команду в .bashrc:
export LC_ALL=C
затем введите source .bashrc
Теперь вам не нужно каждый раз вызывать эту команду вручную, например, при подключении через ssh.

26
Ivan Semochkin

Хотя вы можете установить локаль, экспортирующую переменную env, вам придется делать это каждый раз, когда вы начинаете сеанс. Установка локали таким образом решит проблему навсегда:

Sudo apt-get install locales
Sudo locale-gen en_US.UTF-8
Sudo echo "LANG=en_US.UTF-8" > /etc/default/locale
2
Marco Lavagnino

Для Dockerfile это работает для меня:

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  

Как установить locale-gen?

docker ubuntu/bin/sh: 1: locale-gen: not found

2
Ben

[Этот ответ предназначен только для платформы Linux]

Первое, что вы должны знать, это то, что большую часть пути к файлу конфигурации локали можно получить из 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>

Смотрите последний /usr/share/i18n? Здесь находится ваш конфигурационный файл 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

Что теперь ? Нам нужно скомпилировать их в бинарный архив. Один из способов, например Предположим, у меня есть /usr/share/i18n/locales/en_LOVE, я могу добавить его в список компиляции, т.е. файл /etc/locale-gen:

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

И скомпилируйте его в двоичный файл с помощью 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.

А теперь обновите системный языковой стандарт по умолчанию с желаемыми LANG, LC_ALL ... и т.д. С этим update-locale:

Sudo update-locale LANG=en_LOVE.UTF-8

Фактически update-locale также означает обновление этого файла /etc/default/locale, который будет исходить из системы при входе в систему для установки переменных среды:

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

Но мы можем не захотеть перезагрузить компьютер, чтобы вступить в силу, поэтому мы можем просто передать его в переменную окружения в текущем сеансе Shell:

$ . /etc/default/locale

Как насчет Sudo dpkg-reconfigure locales? Если вы поэкспериментируете с этим, вы поймете, что эта команда в основном действует как графический интерфейс, чтобы упростить описанные выше шаги, т. Е. Отредактировать /etc/locale.gen -> Sudo locale-gen -> Sudo update-locale LANG=en_LOVE.UTF-8

Для python, пока /etc/locale.gen содержит этот кандидат локали и locale.gen компилируется, setlocale(category, locale) должна работать без бросков locale.Error: unsupoorted locale setting. Вы можете проверить правильную строку en_US.UTF-8/en_US/....etc, которая будет установлена ​​в setlocale(), просмотрев файл /etc/locale.gen, а затем раскомментировать и скомпилировать его по своему усмотрению. zh_CN GB2312 без точки в этом файле означает, что правильная строка - zh_CN и zh_CN.GB2312.

1
林果皞

У меня та же проблема, и"export LC_ALL=c" у меня не работает ,
Попробуйтеexport LC_ALL="en_US.UTF-8"(это будет работать).

0
Benyamin Jafari

Сообщение об ошибке указывает на проблему с настройкой локали. Чтобы исправить это, как указано в других ответах, вам нужно изменить свой язык.

В Mac OS X Sierra я обнаружил, что лучший способ сделать это - изменить файл ~/bash_profile следующим образом:

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

Это изменение не сразу проявится в вашем текущем сеансе cli, если вы не перезагрузите профиль bash с помощью: source ~/.bash_profile.

Этот ответ довольно близок к ответам, которые я отправил на другие неидентичные, не дублирующиеся вопросы (т.е. не связанные с pipenv), но которые требуют того же решения.

Модератору: с уважением; мой предыдущий ответ был удален по этой причине, но я чувствую, что это было немного глупо, потому что на самом деле этот ответ применяется почти всякий раз, когда ошибка является "проблемой с локалью" ... но есть ряд различных ситуаций, языков и сред, которые могут вызвать эта ошибка.

Таким образом, А) не имеет смысла отмечать вопросы как дубликаты, а Б) не имеет смысла адаптировать ответ либо потому, что исправление очень простое, одинаковое в каждом случае и не приносит пользы от орнаментирования.

0
geoidesic

Ubuntu:

$ Sudo vi /etc/default/locale

Добавьте ниже настройки в конце файла.

LC_ALL = en_US.UTF-8

0
saneryee