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
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
тоже выдает такую же ошибку
Ответы
Ответ 1
Основная причина: ваша переменная окружения LC_ALL
отсутствует или недействительна
Короткий answer-
просто запустите следующую команду:
$ export LC_ALL=C
Если вы продолжаете получать сообщение об ошибке в новых окнах терминала, добавьте его внизу вашего файла .bashrc
.
Длинный answer-
Вот мои настройки 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
Ответ 2
Выполните следующую команду (она будет работать):
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Ответ 3
Кто-то может сочтет это полезным. Вы можете поместить эти настройки локали в файл .bashrc, который обычно находится в домашнем каталоге.
Просто добавьте эту команду в .bashrc:
export LC_ALL=C
затем введите source .bashrc
Теперь вам не нужно вызывать эту команду вручную каждый раз, когда вы подключаетесь через ssh, например.
Ответ 4
Хотя вы можете установить локаль, экспортирующую переменную env, вам придется делать это каждый раз, когда вы запускаете сеанс. Установка локали таким образом решит проблему навсегда:
sudo apt-get install locales
sudo locale-gen en_US.UTF-8
sudo echo "LANG=en_US.UTF-8" > /etc/default/locale
Ответ 5
Для 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: не найден
Ответ 6
[Этот ответ предназначен только для платформы Linux]
Первое, что вы должны знать, это то, что большую часть пути к файлу конфигурации локали можно получить из localedef --help
:
$ localedef --help | tail -n 5
System 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"
...
Но мы можем не захотеть перезагружаться, чтобы вступить в силу, поэтому мы можем просто поместить его в переменную окружения в текущем сеансе оболочки:
$ . /etc/default/locale
Как насчет sudo dpkg-reconfigure locales
? Если вы /etc/locale.gen
этим, вы поймете, что эта команда в основном действует как графический интерфейс для упрощения описанных выше шагов, например: Edit /etc/locale.gen
→ sudo locale-gen
→ sudo update-locale LANG=en_LOVE.UTF-8
Для python, пока /etc/locale.gen
содержит этот /etc/locale.gen
локали кандидата и locale.gen
компилируется, setlocale(category, locale)
должна работать без бросков locale.Error: unsupoorted locale setting
. Вы можете проверить правильную строку en_US.UTF-8
/en_US/....etc
, /etc/locale.gen
будет установлена в setlocale()
, наблюдая /etc/locale.gen
файлом /etc/locale.gen
, а затем раскомментировать и скомпилировать его по /etc/locale.gen
усмотрению. zh_CN GB2312
без точки в этом файле означает, что правильной строкой является zh_CN
и zh_CN.GB2312
.
Ответ 7
У меня та же проблема, и "export LC_ALL=c"
не работает для меня,
Попробуйте export LC_ALL="en_US.UTF-8"
(это будет работать).
Ответ 8
Сообщение об ошибке указывает на проблему с настройкой локали. Чтобы исправить это, как указано в других ответах, вам нужно изменить свой язык.
В 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), но которые требуют того же решения.
Модератору: с уважением; мой предыдущий ответ был удален по этой причине, но я чувствую, что это было немного глупо, потому что на самом деле этот ответ применяется почти всякий раз, когда ошибка является "проблемой с локалью"... но есть ряд различных ситуаций, языков и сред, которые могут вызвать эта ошибка.
Таким образом, А) не имеет смысла отмечать вопросы как дубликаты, а В) не имеет смысла адаптировать ответ либо потому, что исправление очень простое, одинаковое в каждом случае и не имеет преимуществ при украшении.
Ответ 9
Ubuntu:
$ sudo vi/etc/default/locale
Добавьте ниже настройки в конце файла.
LC_ALL = en_US.UTF-8