PIP安装- locale。错误:不支持的区域设置

加:

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

在同一台服务器上,我成功地用python 2.7.x运行了pip install virtualenv

现在,我已经使用curl https://bootstrap.pypa.io/get-pip.py | python3.4安装了python3.4。

➜  ~ pip --version
pip 8.1.1 from /usr/lib/python3.4/site-packages (python 3.4)

pip uninstall virtualenv也抛出相同的错误

204387 次浏览

根本原因是:您的环境变量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
有人可能会发现它有用。你可以将这些区域设置放在.bashrc文件中,该文件通常位于主目录中 只需在.bashrc中添加这个命令:
export LC_ALL=C < br > 然后输入source .bashrc
现在你不需要每次都手动调用这个命令,例如当你通过ssh连接时

执行以下命令(可以运行):

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

虽然您可以设置环境导出env变量,但每次启动会话时都必须这样做。以这种方式设置locale将永久性地解决问题:

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

对于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

我有同样的问题,和"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"

除非你使用:source ~/.bash_profile重新加载bash配置文件,否则这个变化不会在当前的cli会话中立即显现出来。

这个答案非常接近于我发布的其他不相同,不重复的问题的答案(即与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:
<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.

现在用所需的LANGLC_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呢?如果你玩过它,你会知道这个命令基本上充当GUI来简化上面的步骤,即编辑/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。你可以通过观察/etc/locale.gen文件来检查要在setlocale()中设置的正确字符串en_US.UTF-8/en_US/....etc,然后取消注释并根据需要编译它。该文件中没有点的zh_CN GB2312意味着正确的字符串是zh_CNlocale.gen0。

Ubuntu:

$ sudo vi /etc/default/locale

在文件末尾添加以下设置。

LC_ALL = en_US.UTF-8

在Fedora上也有类似的问题:

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

事实证明,“glibc-all-langpack”;包裹不见了。

dnf install -y glibc-all-langpacks

解决它。