IPython Notebook本地化错误

44
安装最新的Mac OSX 64位Anaconda Python发行版后,当我尝试启动IPython Notebook时,我一直收到ValueError错误。
启动ipython工作正常:
3-millerc-~:ipython
Python 2.7.3 |Anaconda 1.4.0 (x86_64)| (default, Feb 25 2013, 18:45:56) 
Type "copyright", "credits" or "license" for more information.

IPython 0.13.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

但是开始IPython Notebook:

4-millerc-~:ipython notebook

出现ValueError错误(带有回溯信息):

Traceback (most recent call last):
  File "/Users/millerc/anaconda/bin/ipython", line 7, in <module>
    launch_new_instance()
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/frontend/terminal/ipapp.py", line 388, in launch_new_instance
    app.initialize()
  File "<string>", line 2, in initialize
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/config/application.py", line 84, in catch_config_error
    return method(app, *args, **kwargs)
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/frontend/terminal/ipapp.py", line 313, in initialize
    super(TerminalIPythonApp, self).initialize(argv)
  File "<string>", line 2, in initialize
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/config/application.py", line 84, in catch_config_error
    return method(app, *args, **kwargs)
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/core/application.py", line 325, in initialize
    self.parse_command_line(argv)
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/frontend/terminal/ipapp.py", line 308, in parse_command_line
    return super(TerminalIPythonApp, self).parse_command_line(argv)
  File "<string>", line 2, in parse_command_line
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/config/application.py", line 84, in catch_config_error
    return method(app, *args, **kwargs)
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/config/application.py", line 420, in parse_command_line
    return self.initialize_subcommand(subc, subargv)
  File "<string>", line 2, in initialize_subcommand
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/config/application.py", line 84, in catch_config_error
    return method(app, *args, **kwargs)
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/config/application.py", line 352, in initialize_subcommand
    subapp = import_item(subapp)
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/utils/importstring.py", line 40, in import_item
    module = __import__(package,fromlist=[obj])
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/frontend/html/notebook/notebookapp.py", line 46, in <module>
    from .handlers import (LoginHandler, LogoutHandler,
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/IPython/frontend/html/notebook/handlers.py", line 36, in <module>
    from docutils.core import publish_string
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/docutils/core.py", line 20, in <module>
    from docutils import frontend, io, utils, readers, writers
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/docutils/frontend.py", line 41, in <module>
    import docutils.utils
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/docutils/utils/__init__.py", line 20, in <module>
    from docutils.io import FileOutput
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/docutils/io.py", line 18, in <module>
    from docutils.utils.error_reporting import locale_encoding, ErrorString, ErrorOutput
  File "/Users/millerc/anaconda/lib/python2.7/site-packages/docutils/utils/error_reporting.py", line 47, in <module>
    locale_encoding = locale.getlocale()[1] or locale.getdefaultlocale()[1]
  File "/Users/millerc/anaconda/lib/python2.7/locale.py", line 503, in getdefaultlocale
    return _parse_localename(localename)
  File "/Users/millerc/anaconda/lib/python2.7/locale.py", line 435, in _parse_localename
    raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8

在终端中运行locale命令:

5-millerc-~:locale 
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

LC_CTYPE="UTF-8" 对我来说似乎是错误的。 - wRAR
我将问题更改为平台中立,因为我在EPD Python安装中也奇怪地遇到了相同的问题。 - Clayton
@ubuntu - 如果我先问了,这怎么会是一个重复的问题呢? - Clayton
4个回答

100

以下是解决方案总结:http://blog.lobraun.de/2009/04/11/mercurial-on-mac-os-x-valueerror-unknown-locale-utf-8/

我将以下行添加到我的.bash_profile文件中:

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

我重新加载了个人资料:

source ~/.bash_profile

我随后再次运行了ipython

ipython notebook

更改语言环境

上述内容适用于美国区域设置下的英语语言。但有些人可能需要不同的设置。

显而易见的是,要查找系统当前的设置,请使用:

$ locale

要检索系统中所有有效设置的列表:

$ locale -a

然后选择您首选的语言环境。例如,对于瑞士法语语言环境,解决方案如下:

export LC_ALL=fr_CH.UTF-8
export LANG=fr_CH.UTF-8

通常情况下,导出 LC_ALL 是错误的。 - wRAR
1
当然,这个修复只适用于居住在美国的用户。 - asmeurer
您的链接似乎已经失效。 - r12
谢谢,我找到了更多关于它的信息。我仍然不明白为什么macOS在某些区域和语言设置上会失败。真是令人沮丧。 - uchuugaka
这在事后显而易见,但请确保在运行Jupyter/iPython的终端窗口中为配置文件提供源... - Sealander
显示剩余3条评论

30

这是OS X终端应用程序中的一个错误,只在特定的区域设置(国家/语言组合)中显示。打开“应用程序/实用工具”中的终端,并取消“启动时设置区域环境变量”的框。

输入图像描述

这将使您的LANG 环境变量为空。这可能导致终端使用不正确的本地化设置。终端中的locale命令将告诉您使用了哪些设置。若要使用正确的语言,请在您的bash个人配置文件(通常为~/.profile)中添加一行。

export LANG=your-lang

your-lang 替换为你的语言的正确区域说明符。命令 locale -a 将显示所有的区域说明符。例如,美国英语的语言代码是 en_US.UTF-8。区域设置会影响在有可用翻译时使用哪些翻译,以及日期、货币和小数点的格式。

请注意,此图像和内容摘自http://conda.pydata.org/docs/troubleshooting.html#unknown-locale(我也是该页面的原始作者)。


完美闭环!你提供的链接指向一个论坛,然后又回到了这个问题 :) - Linus Unnebäck
这个解决方案的更详细说明可以在http://conda.pydata.org/docs/troubleshooting.html#unknown-locale找到。 - asmeurer
那个文档页面比我这里的内容更有帮助,而且那个错误链接是无用的,所以我刚刚更新了我的答案,加入了那些文档的内容。仅仅取消勾选框通常是不够的,你需要将LANG环境变量设置为适合你所在地区的正确值。 - asmeurer
由于这个修复破坏了 oh-my-zsh,所以不得不撤销此修复。 - Linus Unnebäck
1
我认为这不是终端应用程序的错误:iTerm2也有同样的问题。 - Alexey
显示剩余5条评论

13

在iTerm中转到菜单

Preferences -> Profiles -> Terminal -> (Environment) 

然后取消勾选

"Set locale variables automatically"

让这个错误消失。


注意:这也适用于iTerm2。 - Kshitij Saraogi

3

由于您的LC_CTYPE设置错误,您需要找出设置该错误值的位置,并将其更改为类似en_US.UTF-8的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接