完整堆栈跟踪:

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


当前回答

Ubuntu:

sudo vi /etc/默认/本地

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

LC_ALL = en_US。utf - 8

其他回答

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

虽然您可以设置环境导出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="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

错误消息表明区域设置有问题。如其他答案所示,要修复此问题,您需要修改您的区域设置。

在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)调整答案也没有意义,因为修正非常简单,在每种情况下都是一样的,并且没有从装饰中受益。