背景
今天遇到了一个问题:当我加载了某个虚拟环境(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(名称)来实现。<