问题: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
了python2.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
也会引发相同的错误
回答 0
根本原因是:您的环境变量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
回答 1
运行以下命令(它将起作用):
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
回答 2
有人可能会觉得有用。您可以将这些语言环境设置放在.bashrc文件中,该文件通常位于主目录中。
只需在.bashrc中添加此命令:export LC_ALL=C
然后键入source .bashrc
Now,例如,当您通过ssh连接时,您无需每次都手动调用此命令。
回答 3
尽管可以设置导出环境变量的语言环境,但每次启动会话时都必须这样做。以这种方式设置语言环境将永久解决问题:
sudo apt-get install locales
sudo locale-gen en_US.UTF-8
sudo echo "LANG=en_US.UTF-8" > /etc/default/locale
回答 4
[此答案仅适用于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
样 如果您玩转它,您将知道此命令基本上充当GUI来简化上述步骤,即Edit /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
回答 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?
回答 6
我有同样的问题,对我没有用。"export LC_ALL=c"
尝试export LC_ALL="en_US.UTF-8"
(它将起作用)。
回答 7
该错误消息表示语言环境设置有问题。要解决此问题(如其他答案所示),您需要修改语言环境。
在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"
除非您使用以下命令重新加载bash配置文件,否则此更改在当前cli会话中不会立即显现source ~/.bash_profile
。
这个答案非常接近我发布给其他非相同,非重复的问题(即与pipenv不相关)的答案,但是碰巧需要相同的解决方案。
致主持人:尊敬;由于这个原因,我以前的答案被删除了,但是我觉得这有点愚蠢,因为实际上,无论何时只要错误是“语言环境问题”,这个答案都适用…但是可能会触发多种不同的情况,语言和环境该错误。
因此,A)将问题标记为重复项是没有意义的,而B)调整答案也没有意义,因为解决方法非常简单,在每种情况下都是相同的,并且无法从修饰中受益。
回答 8
Ubuntu:
$ sudo vi /etc/default/locale
在文件末尾添加以下设置。
LC_ALL = en_US.UTF-8