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

➜  ~ pip install virtualenv
Traceback (most recent call last):
  File "/usr/bin/pip", line 11, in 
    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 тоже выдает ту же ошибку

ericn

Ответов: 10

Ответы (10)

Основная причина: ваша переменная среды LC_ALL отсутствует или недействительна

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

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

$ export LC_ALL=C

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

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

Вот мой локаль настройки:

$ 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 
        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

For Dockerfile, this works for me:

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  

How to install locale-gen?

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

У меня была такая же проблема, и "export LC_ALL = c" у меня не сработало.

Попробуйте export LC_ALL = "en_US.UTF-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), но которые требуют того же решения.

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

Таким образом, A) не имеет смысла отмечать вопросы как повторяющиеся, а B) не имеет смысла адаптировать ответ либо потому, что исправление очень простое, оно одинаково во всех случаях и не требует украшения .

[Этот ответ предназначен только для платформы 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:

Посмотреть последний / 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 file:

$ 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? Если вы поиграете с этим, вы узнаете, что эта команда в основном действует как графический интерфейс для упрощения вышеуказанных шагов, то есть Edit / etc / locale.gen -> sudo locale-gen -> sudo update-locale LANG = en_LOVE.UTF-8

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

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

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

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

sudo apt-get install locales
sudo locale-gen en_US.UTF-8
sudo echo "LANG=en_US.UTF-8" > /etc/default/locale

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

Была аналогичная проблема в Fedora:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib64/python3.10/locale.py", line 620, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

Оказалось, что отсутствует пакет "glibc-all-langpacks".

dnf install -y glibc-all-langpacks

решил.

Ubuntu:

$ sudo vi / etc / default / locale

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

LC_ALL = en_US.UTF-8

2022 WebDevInsider