由于版本更新,最新版本的jupyter可能需要把配置文件jupyter_notebook_config.py中 c.NotebookApp.ip = '*'
改为 c.NotebookApp.ip = '0.0.0.0'
。
我原本认为只需要在不同的虚拟环境下启动jupyter就可以使用完全不同的环境了,但事实证明,这样建立的jupyter之间是有干扰的。主要是由于jupyter的环境变量和不同jupyter实际上是共享配置配置文件导致的。其中有一些值得注意的地方,故将其过程记录下来。
我刚开始的时候按这篇博文中的解决方法,只写了一份新的配置文件jupyter_notebook_config.py ,于是我指定新的配置文件,启动了新的jupyter
jupyter notebook --config /home/.../jupyter_notebook_config.py
(注:在新虚拟环境里执行上述命令时可能会报错 socket.gaierror: [Errno -5] No address associated with hostname
.我也没搞清楚这是为什么,但我发现了个小trick:把配置文件jupyter_notebook_config.py中 c.NotebookApp.ip = '*'
改为 c.NotebookApp.ip = '0.0.0.0'
即可解决问题。)
结果发现,这个新的配置文件只改变了启动的端口、密码等信息,启动后使用的虚拟环境、插件和核心仍和原先的jupyter相同。
深究原因,发现在不同的虚拟环境下,jupyter 的各种路径居然是相同的
jupyter --paths
也就是,即便在不同的虚拟环境中,jupyter使用的数据和配置文件都是相同的,难怪这些jupyter长得都一样。
查了很多资料,没看到怎么修改这些paths。但我相信,程序是人写的,是写出来的就一定能改,如果写程序的人没留外面修改的命令和接口,那为什么不直接改源码呢?于是我查看了jupyter的源码,在jupyter-core 模块找到了paths.py文件。
(注:如果不清楚该文件的位置,可以用如下方式找到: 在虚拟环境下进入Python )
阅读,发现果然是我要找的文件。对该文件中部分代码进行简单粗暴的修改
另外,还有个文件migrate.py,里面定义了ipython的位置,也可以改一下,但对启动新jupyte来说似乎不是必要的。
现在再查看 jupyter --paths
, 发现已经更改为想要设置的新路径了
这时候再次启动 jupyter notebook
,环境配置已经设置为新的了,成功!