我是靠谱客的博主 感性奇迹,这篇文章主要介绍Jupyter Notebook多版本共存(Kernel的管理),现在分享给大家,希望可以做个参考。

背景

今天遇到了一个问题:当我加载了某个虚拟环境(virtualenv)后,确认了在bin/activate预先设置的环境变量已经生效,于是打开jupyter notebook:

jupyter notebook --port xxx  --ip 10.10.xxx.xx

但是打开notebook之后通过os.getenv(‘LD_LIBRARY_PATH’)发现上述生效的环境变量在notebook却不见了,从而使得需要import的包中某些动态连接库找不到。

原因排查

尝试通过os.environ[‘LD_LIBRARY_PATH’]来将环境变量加进去,但发现依然会存在找到动态连接库的问题。通过一系列的查证,发现关键在于:notebook的环境变量需要通过内核来指定。内核简单来说就是,notebook所用的,用于解析当前程序的python版本(比如python 2或者python3,系统本身的还是通过虚拟环境搭建的……)
首先,我们可以通过jupyter kernelspec list来查看系统目前都有哪些kernel可供使用:

$ jupyter kernelspec list
Available kernels:
  python3   xxxx//share/jupyter/kernels/python3
  python2   xxxx

上述表明我目前在jupyter中有2个kernel,其中一个是通过虚拟环境搭建的,名称为python3
另一个是系统本身的,名称为python2。kernel的删除可以通过jupyter kernelspec remove xxx(名称)来实现。Kernel的管理非常关键,我总结下来大部分环境的原因都是因为kernel没有用对。假如我需要在python3这个kernel跑我的程序,我需要在这个kernel对应的配置文件,也就是xxxx//share/jupyter/kernels/python3/kernel.json中加入相关的环境变量,如:

{
  "argv": [
{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3",
 "language": "python",
 "env": {
    "LD_LIBRARY_PATH": "xxx:xxx"
 }
}

设置完之后,如需使用jupyter notebook, 需要重启notebook并且在notebook之后选中上述设置好的kernel。

更多

  1. 目前VSCode中对jupyter notebook还算友好,但是还是缺乏对Kernel的管理,其默认的做法是在里面直接新建很多个kernel,然而这些Kernel的环境变量都是初始值,所以建议启动notebook的时候不要用VSCode
  2. 取而代之的做法是通过terminal建立(也就是jupyter notebook --port xxx --ip 10.10.xxx.xx),然后在VSCode中打开相应的kernel URL

最后

以上就是感性奇迹最近收集整理的关于Jupyter Notebook多版本共存(Kernel的管理)的全部内容,更多相关Jupyter内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部