装Jupyter过程中遇到奇奇怪怪的各种坑,查了无数github issue + stackoverflow,期间无数次内心崩溃,最终终于搞好了,发现遇到的问题中文解决方案很少,于是在这边记录下。
归根到底,linux没好好学,这边顺便记录下解决问题过程中收获的相关知识点。
最初问题:
一切的问题起源于起Jupyter时的报错1
ImportError: cannot import name 'Type'
这个问题百度,基本没有。Google,在一个stackoverflow最尾端的回答看到一个人说了一嘴是python版本为3.5的问题,我一想,诶,我不就是3.5, 点进去一看:Python 3.5.1 doesn’t have typing.Type
先是试了一下pip install –upgrade typing 不行
脑袋一拍,好的,那就装3.6!于是,这成为了我接下来噩梦的开头…
两分钟装好了3.6, 又下了一遍jupyter,看到下在了3.6的site-packages里,然后jupyter一运行,还是和之前一个错。
检查python3,确认是3.6了啊,懵逼了一会,又检查了下jupyter –path,发现了原因,jupyter用的还是3.5包里的,一气之下把3.5包里得Jupyter相关文件全部删了,(jupyter:你以为就会乖乖自动找3.6包里的了)天真。。直接报错给我看:1
2No module named 'jupyter'
No module named 'jupyter_core'
诶 我3.6里面的包是白下了吗!我能怎么办,我只能怂怂地给他恢复了删除文件。
那我又想,干脆卸载干净重装算了,于是思路跳到了如何卸载jupyter这条路上,然后又开心地踩了一回坑
先是一堆人说jupyter卸载不了呀,然后有个人跳出来说,可以用autoremove来卸载,我仿佛抓到了希望之光,3s下好了autoremove,提示我装好了,然后我在shell里愉快地敲下autoremove jupyter,
提示我 command not found: autoremove 事情果然没有那么简单,但是我会就此作罢吗?我不会,丧心病狂的我作死的输入了 which jupyter 然后跑到jupyter指令在的路径下,把它删除了。
于是,从现在开始,我再怎么重新下载jupyter,都是command not found: jupyter了(废话)
机智的我又灵机一动,把3.6里的jupyter相关文件全部拷过来在系统指令的路径下,按理说这边其实应该就可以了,但是由于一个微小的问题,导致依然报错,让我误以为这条路不通,于是反而慢慢接近了问题的真相。
我先直接在文件夹中找到了3.6包中的jupyter notebook, 双击打开,发现能够正常启动一个服务。开始思考问题所在,问题事实上是shell端的jupyter无法选择正确的python版本的问题,说起来,之前下的tensorflow似乎也有这个问题,在python3中import tensorflow没有问题,但是在shell中直接输入tensorflow就会command not found,这似乎是一个系统环境变量问题
带着这个思路Google,看到一个搭建jupyter的回答,建议采用虚拟环境的方式来安装jupyter。
Python 的第三方包成千上万,在一个 Python 环境下开发时间越久、安装依赖越多,就越容易出现依赖包冲突的问题。为了解决这个问题,开发者们开发出了 virtualenv,可以搭建虚拟且独立的 Python 环境。这样就可以使每个项目环境与其他项目独立开来,保持环境的干净,解决包冲突问题。
在尝试的过程中,虽然由于没有特殊配置,引用了全局环境的默认配置,虚拟环境中的jupyter还是指向了3.5,但是在此尝试中我意识到了问题的核心:shell端全局指令的地址指向如何配置?
结合Google,我回想到了安装Maven时在.bash_profile中配过的环境变量,那时并不理解配置的是什么。这次隐约明白了,尝试在文件下默认路径指向3.6的包,
1 | export PATH=/Library/Frameworks/Python.framework/Versions/3.6/bin/:$PATH |
再次删除之前默认全局指令路径下的jupyter相关包,启动:这次果然没有报command not found了,虽然同样报了上次那个微小的问题,但是已经验证了这次的思路是对的,那么解决掉这个小问题应该就可以了
1 | OSError: '/Users/Iris/.jupyter' exists but is not a directory |
试了那么多了,那就再试一次吧。于是不管这个文件之前是谁自动生成的,直接暴力rm重新mkdir,再次启动jupyter notebook,感人的一幕出现了,此处需要大结局截图:
综上所述,如果我在配置Maven时就去深刻理解一下环境变量这个词,今天的所有坑我都可以绕道而行 (/想锤死自己的微笑脸.jpg)
然后虽然这次virtualenv没有用成功,但它确实是个好东西,希望之后能够深入了解用起来
再ps:为了奖励自己从这个萌新问题里蠢蠢的跳了出来,顺便庆祝下520&二哈的一个小成就,晚上愉快的去蟹屋吃自助长肉肉去 (只是给长肉找个冠冕堂皇的借口而已)