乐趣区

为什么要用IPython/Jupyter?

python 里面调试确实有点烦恼,尤其是在 vim 里,想要尝试一些简单的编码问题,实在是有点麻烦,不想到命令行模式一行一行执行,也不想再新建一个文件测试一个简单的功能。
而且就是不管这些,测试一个简单的功能如学习语法、测试编码、测试新学习的包等,在 IDE 里面测试,看不到每个部分的 output 效果(除非自己手动去命令行里复制或截屏),在命令行里测试,则没法轻松撤销前面的代码。。。。所以这时候才想到好像前阵子看到 youtube 视频里别人用 IPython,是那种又能轻松编辑又能为每部分显示 output 效果,还能在旁做 markdown 笔记的东西。出于这个想法,搜到了这篇知乎回答,看到了不少有意思的东西,感觉又展开了一个崭新的领域,python 的视界豁然开朗。这篇文章极好的解释了 IPython 的入门用法,相当酷!我怎么竟然这么久都不知道这种东西的存在?
IPython 和 Jupyter 的区别?
据说一开始 IPython 是作为 IPython shell 的存在,后来 Jupyter 融合了它,又把自己和 IPython 上独立出来,做成了网页版的 Jupyter Notebook 这样的东西。Jupyter 强大的特性,加上和各种数据研究库的紧密结合,真让人不能忽视它的存在了。IPython 的安装方法,简单地 pip install ipython 即可。但是,想到 IPython 本身一个 shell,让我想起了我自己用的 shell 是 zsh,让我把 zsh 切换到别的 shell 里面去,还真有点不喜欢。。这可能是个 stylish issue 吧。所以,应该直接了当的安装 jupyter,其中也会自动安装上 IPython shell,作为其运行的 Kernel。
错误的安装 Jupyter
~ 只安装 Jupyter 本身的话,很简单:python -m pip install jupyter。不过根据官方文档,强烈建议安装 Jupyter 的 Anaconda 发行版,像大礼包一样的自动安装 python+Jupyter Notebook+ 一系列数据研究库。因为本来就是要研究机器学习等一系列数据研究的,所以 Anaconda 正合适。这个我觉得再好不过了,所以直接跳到 Anaconda 页面去看安装方法。然后看到,Anaconda 安装方法是不能简单 apt-get 或 brew 或 pip install 的,500M 左右的大小,需要下载后启动图形安装工具或 shell 脚本安装(.sh 文件本身就 500M,而且安装分为 Python 3 和 Python 2 的两种方式。~
然后就会发现:Anaconda 谁装谁后悔!Anaconda 体积庞大,软件管理看起来一体化简单,实际上在处理一些 Bug 和自定义设置的情况下非常不好定位。我在 Mac 上初次安装 Anaconda 大礼包后,连简单的 jupyter notebooke 这样的命令都执行不了,详尽了办法最后才用直接指定路径的方式运行。这只是一开始,之后还有 notebook 里各种找不到外部安装的 python package 的情况。所以还是别图便宜,手动安装一步一步来吧。一键安装很多时候都没那么好。试了下手动安装的方法,pip install jupyter,或者官方的 python -m pip install jupyter,都会发生 jupyter: command not found 找不到命令。参考了数十篇网络上中英文文章,都没有解决。常说的直接引用~/.local/bin 这个位置的 jupyter 也不行(没有)。终于,意识到这些方法都是错误的思路。
正确的安装 Jupyter Notebook
不管官网怎么推荐 Anaconda,网络上各种简单解说,总之 Anaconda 或 pip install jupyter 都很容易引发巨大的问题。由于 jupyter 的性质:它是调用 python 内核的东西,用系统 python 还是用自己的 python,这都是很敏感很麻烦的问题。用系统的 python 很容易识别不到或者被别的程序修改导致 bug,用自己的 python 会导致别的地方安装的 package 在 jupyter 里识别不了。所以:参考了这篇的思路,正确的方法是在 virtualenv 虚拟环境下,绝对安全封闭的环境下用 pip 安装 jupyter。这样的话,第一,不需要 sudo pip 这样敏感的东西去安装 jupyter 这么复杂的工具;第二,也保证了 jupyter 不会搞乱其它东西。然后,二话不说,在已有 virtualenv 的情况下,在某个文件夹里建立虚拟环境,并启动虚拟环境。然后简单一句 pip install jupyter,完成安装。安装完成后 jupyter notebook,完美运行!
# for Python2
$ pip install jupyter

# for Python3
$ pip3 install jupyter
这样的话,即使以后要在 jupyter 里各种安装插件、各种配置新 kernel 等,都不用害怕了,因为再怎么玩弄,也出不去这个圈。话说回来,实际上你也没什么需要在全系统配置 jupyter 的必要,在某个文件夹玩就足够足够的了。何必呢?
启动 Jupyter
用命令行启动很简单,在某个工作目录,输入:
$ jupyter notebook
这样就能以这个目录打开一个 http://localhost:8889/tree 的网页,一切都在这个网页里操作。
正确的启动 Jupyter
正确的方式,实际上是在 Virtualenv 虚拟环境下启动,可以随意安装各种包,适配各种 Python 版本环境:
# 启动 Virtualenv
$ source ~/PATH-TO-VENV/activate

# 启动 Jupyter
(venv)$ jupyter notebook
添加 Python3 Kernel
参考:Jupyter 增加内核
默认的只有 Python2 Kernel,所以只能建立 Python2 的笔记。要添加也很简单。强烈建议在 Python3 的 Virtualenv 虚拟环境下实现!!!
# 启动 Virtualenv
$ source ~/PATH-TO-VENV/activate

# 在 Python3 的虚拟环境下安装 Kernel
(venv3)$ pip3 install ipykernel

# 将 Kernel 添加进 Jupyter 笔记选项中
(venv3)$ python -m ipykernel install
启动 Jupyter notebook 后,就会看到 Kernel 里面多了 Python3 了:
终端里找不到 jupyter 命令
总是报 command not found jupyter 错误,说没有这个命令。一开始还以为是 zsh 的问题,可是切换到 bash 也一样。照着网上攻略在.zshrc 里改也没用,在.bash_profile 里改也没用。然后发现,在 Mac 自带的 Terminal.app 中就可以正常打开,不需要改任何配置。这才知道原来是 iTerm2 无法识别。于是在 Terminal.app 中用 which 命令查看 jupyter 命令的所在处,看到它位于 /Users/ 我的用户名 /anaconda2/bin/jupyter 这个地方。于是直接在~/.zshrc 中加入 alias:
$ alias jupyter=”/Users/ 我的用户名 /anaconda2/bin/jupyter”
重启 iTerm2,好用!
但是,iTerm2 中的 bash 还是不能访问,用同样的方法也不行。暂时没找到解决方法。
常见问题
Kernel Error
这个一般是你的.ipynb 文件中的 kernel 指定问题。比如你创建笔记文件时,指定的是 Python2 的环境(或虚拟环境),然后你本机的 Python2 环境或虚拟环境被删除了,然后 Jupyter 根据笔记文件里指定的路径地址,就找不到 Kernel 了。所以打开笔记本的这个笔记 -> 点菜单上 Kernel -> 点 Change Kernel -> 选一个当前环境支持的 Kernel 就可以了。

退出移动版