Linux jupyter导入conda环境及第三方库失败解决问题
- 导入conda环境
- jupyter notebook导入已有库失败
- 问题
- 解决方案
- 后续问题
- 最后结果
参考链接:
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内核有何影响,导致无法导入第三方库