【python】python27安装jupyter编码UnicodeDecodeError_byte_0xe5_in_position_4ordinal

解决python2.7安装jupyter打开时报错UnicodeDecodeError ‘ascii’ codec can’t decode byte 0xe5 in position 4 ordinal not in range(128)

错误:

The Jupyter HTML Notebook.

这将启动一个基于tornado的HTML笔记本服务器,它提供一个html5/
javascript笔记本客户端。

Traceback (most recent call last):
  File "/home/lz/venv/bin/jupyter-notebook", line 10, in <module>
    sys.exit(main())
  File "/home/lz/venv/local/lib/python2.7/site-packages/jupyter_core/application.py", line 266, in launch_instance
    return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/home/lz/venv/local/lib/python2.7/site-packages/traitlets/config/application.py", line 657, in launch_instance
    app.initialize(argv)
  File "</home/lz/venv/local/lib/python2.7/site-packages/decorator.pyc:decorator-gen-7>", line 2, in initialize
  File "/home/lz/venv/local/lib/python2.7/site-packages/traitlets/config/application.py", line 89, in catch_config_error
    app.print_help()
  File "/home/lz/venv/local/lib/python2.7/site-packages/traitlets/config/application.py", line 385, in print_help
    self.print_subcommands()
  File "/home/lz/venv/local/lib/python2.7/site-packages/traitlets/config/application.py", line 377, in print_subcommands
    print(os.linesep.join(lines))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 4: ordinal not in range(128)

方法1

搜到一部分博客说是改一下编码启动方式就好了,试试下面两个指令:

LANG=zn jupyter notebook
LANG=zn.utf8 jupyter notebook

试了下对于我的系统无效。

方法2

也是改文件编码方式,去报错对应的py文件里面改,根据报错可知定位到py文件

venv/local/lib/python2.7/site-packages/traitlets/config/application.py

然后sudo vim打开,在里面加上

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

再运行jupyter notebook试试。

看了一些资料,感觉这个是适用于在python2.7里执行一些py文件报UnicodeDecodeError: 'ascii’错的情况。我的也没解决。

方法3

在python安装目录 local/lib/python2.7/site-packages 中新建一个文件sitecustomize.py

sudo vim sitecustomize.py

内容写:别人说是更改python编译器的默认编码

import sys 
sys.setdefaultencoding("utf-8")

试过,无效。

方法4

jupyter notebook的文件和python2.7关于编码有冲突,所以直接用python3装。ubuntu系统也是自带python3的,jupyter的版本也不要选太新的。

输入,pip3强制卸载以前的jupyter版本重装,

pip3 install --upgrade --force-reinstall --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple jupyter

或者:

python3 -m pip install --upgrade pip
python3 -m pip install jupyter

可以加上: sudo ,我安好以后的版本是:5.7.8

看到国外论坛说使用版本低一些的notebook:

pip install notebook==5.6.0

设置一下编码:

export LANG=en_US:UTF-8
export LANGUAGE=en_US:en

然后连接内核kernel和之前建的环境venv,启动一下试试。

python -m ipykernel install --user --name=venv
cd 到环境工作路径再运行 jupyter notebook

因为不是直接按这个方法做的,所以也不太清楚和官方文档的py27安装方法有没有区别,但是这个时候我已经可以通过jupyter notebook打开自带的浏览器了。

可以用jupyter notebook启动浏览器后续

悲催的是还是出不来jupyter的交互式窗口,浏览器里显示:

the file at /run/user/1000/jupyter/nbserver-7905-open.html is not readable.

有人说是因为火狐不是默认浏览器,我更改了也不行。

github论坛说可以看一下命令窗口的提示,直接复制提示的这个链接进浏览器:

[I 00:34:07.671 NotebookApp] The port 8891 is already in use, trying another port.
[I 00:34:07.671 NotebookApp] The port 8892 is already in use, trying another port.
[I 00:34:07.678 NotebookApp] Serving notebooks from local directory: /home/dzg
[I 00:34:07.678 NotebookApp] The Jupyter Notebook is running at:
[I 00:34:07.678 NotebookApp] http://localhost:8786/?token=06081ac607a91ad1b07af111a54b737645e7e16bcb7c4248

到这里终于出现juyter notebook的一点样子了,只是只加载了jupyter的上面一点儿菜单,又提示浏览器页面禁用了Javascript,解决办法:

浏览器地址栏并输入 about:config 按下 Enter
提示 I'll be careful, I promise! 同意转到Firefox的设置页面
搜索 javascript.enabled 进入 Search 框;然后双击该设置行的状态设置为 true.

这次终于能打开了。

这次bug出现的算是一个典型,只是自己解决起来莫名其妙,也不知道哪个环节导致最终好了,而且在搜索的过程中也发现了大家遇到的各种各样的问题和修复的方式。系统和包的版本也是一个很大因素。

遇到问题还是要耐心一些,国外的一些论坛和官方文档还是很有帮助的。

上一篇:Django学习day2——Django安装与环境配置


下一篇:推导式