pip install - locale.Error:不支持的语言环境设置

时间:2016-04-04 03:24:45

标签: python python-3.x centos pip

完整的堆栈跟踪:

➜  ~ 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也会抛出相同的错误

9 个答案:

答案 0 :(得分:532)

根本原因是:您的环境变量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 :(得分:33)

运行以下命令(它将起作用):

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

答案 2 :(得分:26)

有人可能觉得它很有用。您可以将该区域设置放在.bashrc文件中,该文件通常位于主目录中 只需在.bashrc中添加此命令:
export LC_ALL=C
然后输入source .bashrc
现在,每次通过ssh进行连接时,您都不需要手动调用此命令。

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:2)

[此答案仅适用于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_ALLupdate-locale ... etc更新系统默认语言环境:

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。您可以通过观察en_US.UTF-8文件,检查要在en_US/....etc中设置的正确字符串setlocale() / /etc/locale.gen,然后取消注释并根据需要对其进行编译。 zh_CN GB2312在该文件中不带点,表示正确的字符串是zh_CNzh_CN.GB2312

答案 6 :(得分:0)

我遇到同样的问题, "export LC_ALL=c" 对我不起作用
尝试 export LC_ALL="en_US.UTF-8" (它会起作用)。

答案 7 :(得分:0)

错误消息表示区域设置存在问题。要解决此问题,请修改您的区域设置。

在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无关),但恰好需要相同解决方案的答案。

致主持人:尊重;我的上一个答案因为这个原因被删除了,但我觉得这有点傻了,因为这个答案几乎适用于错误是&#34;语言环境问题&#34; ...但是有很多不同的情况,语言,和可能触发该错误的环境。

因此,A)将问题标记为重复是没有意义的,并且B)定制答案没有意义,因为修复非常简单,在每种情况下是相同的,并且没有受益于装饰。

答案 8 :(得分:0)

Ubuntu:

$ sudo vi /etc/default/locale

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

LC_ALL = en_US.UTF-8