Linux jupyter导入conda环境及第三方库失败解决问题

Linux jupyter导入conda环境及第三方库失败解决问题


参考链接:
jupyter-notebook选择相应的环境
更换Jupyter Notebook 内核Python版本 以及jupyter 使用记录
更换Jupyter Notebook 内核Python版本

导入conda环境

# 切换到需要导入的环境
source activate env_name
	
#安装ipykernel
pip install ipykernel
	
#安装完毕后终端输入,其中双引号要加上
python -m ipykernel install --user --name env_name --display-name "网页端显示名字"

#删除kernel中的虚拟环境,在jupyter中运行
jupyter kernelspec remove env_name

#将默认python设置为启动jupyter时的虚拟环境
python -m ipykernel install --user

jupyter notebook导入已有库失败

问题

jupyter内运行程序时提示没找到‘spinup’库,但是Linux中却能成功导入该第三方库。

/home/aki/anaconda3/bin/python: Error while finding module specification for 'spinup.run' (ModuleNotFoundError: No module named 'spinup')

解决方案

查询后发现这可能是因为jupyter notebook中运行的python与Linux中的不一致,所以分别查看两者运行的python文件位置,可以看到

jupyter notebook:
import sys
print( sys.executable)
/home/aki/anaconda3/bin/python

Linux:
import sys
print( sys.executable)
/home/aki/anaconda3/envs/spinningup/bin/python

这大概是因为我最开始图方便选择在base环境下进行了命令python -m ipykernel install --user --name env_name --display-name "网页端显示名字"导致jupyter内的kernel设置为base环境的python
因此查看Linux中kernel配置文件所在:

ipython kernelspec list
or
jupyter kernelspec list

输出如下:

Available kernels:
  mario         /home/aki/.local/share/jupyter/kernels/mario
  spinningup    /home/aki/.local/share/jupyter/kernels/spinningup
  python3       /home/aki/anaconda3/share/jupyter/kernels/python3

于是我在Linux进入到需要修改的spinningup的python对应目录下,修改kernel.json文件

cd /home/aki/.local/share/jupyter/kernels/spinningup
vim kernel.json

然后将文件第二行改为Linux中运行python的位置,如下图所示
展示图片
此时我再次打开jupyter尝试导入,但是此次切换spinningup的kernel却始终显示无法连接上服务器,为了解决该问题我在Linux上输入

source activate spinningup
pip install ipykernel
python -m ipykernel install --user --name spinningup --display-name "spinningup"

之后发现终于可以连接上服务器,切换到spinningup的kernel后发现又提示无法找到第三方库,于是重新观察jupyter的python运行位置和kernel配置文件位置

jupyter的python运行位置
import sys
print( sys.executable)
/home/aki/anaconda3/envs/spinningup/bin/python

Linux的kernel配置文件位置
Available kernels:
  mario         /home/aki/.local/share/jupyter/kernels/mario
  spinningup    /home/aki/.local/share/jupyter/kernels/spinningup
  python3       /home/aki/anaconda3/envs/spinningup/share/jupyter/kernels/python3

发现jupyter的python已经和Linux上保持一致,但是python3的kernel配置文件位置发生了改变,于是我又找到python3新的配置文件位置并修改kernel.json文件

cd /home/aki/anaconda3/envs/spinningup/share/jupyter/kernels/python3
vim kernel.json

并将第二行改为python3最初运行python的位置/home/aki/anaconda3/bin/python
终于打开jupyter notebook后可以顺利连接上spinningup的服务器,并且也可以在spinningup下顺利地导入第三方库了,成功解决!

2021.01.31 发现在base环境下打开jupyter仍然无法在spinningup下导入第三方库,在切换到spinningup环境后打开发现可以成功导入,猜测原因是不同环境打开的jupyter内核不同。

后续问题

至于为什么python3的kernel配置文件位置会改变,原因暂时还不清楚,等待后续研究,猜测是python -m ipykernel install --user --name spinningup --display-name "spinningup"命令的影响。

2021.01.31 发现python3原来是打开jupyter的环境,其kernel配置文件位置为该环境的/share/jupyter/kernels/python3,我新建一个test环境打开jupyter,在jupyter内输入指令查看此时的kernel配置文件位置。

!jupyter kernelspec list

Available kernels:
  mario         /home/aki/.local/share/jupyter/kernels/mario
  spinningup    /home/aki/.local/share/jupyter/kernels/spinningup
  python3       /home/aki/anaconda3/envs/test/share/jupyter/kernels/python3

此时python3的位置改为test环境内的/share/jupyter/kernels/python3,随后打开jupyter在spinningup的kernel下导入第三方库失败,说明只能在spinningup环境下打开jupyter才能成功导入spinningup环境下的第三方库。
我又进入之前在spinningup环境打开jupyter时候的kernel配置文件位置并将其中路径修改为初始状态python

cd /home/aki/anaconda3/envs/spinningup/share/jupyter/kernels/python3
vim kernel.json

在这里插入图片描述
再度在spinningup环境下打开jupyter以spinningup的kernel导入第三方库成功,说明导入第三方库与python3使用哪里的python文件无关。

最后结果

jupyter和Linux下的spinningup环境都使用同样的python文件。

import sys
print( sys.executable)
/home/aki/anaconda3/envs/spinningup/bin/python

但是除spinningup外的环境下打开jupyter都无法在kernel为spinningup的情况下成功导入该环境的第三方库。

换句话说,两方的spinningup使用一样的python,却只能通过spinningup环境打开jupyter才能导入第三方库。。

疑问:使用不同环境打开jupyter对spinningup内核有何影响,导致无法导入第三方库

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值