问题原因和解决

  • 1.报错的原因,我的理解是python环境相互覆盖了。
  • 2.怎样解决
  • 3.总结


这个图报错已经困扰我好几天了,看了别人很多博客,尝试了很多方法,但没什么效果,不过最终还是找到问题的所在了。

为何我如此纠结,死磕不放呢,当然不完全是因为有点小强迫症,而是因为我想偷懒,为何这样说呢,那让我们来分析下原因:

(这图,是我Anaconda安装了tensorflow后,启动jupyter所报的错,我看大部分人都是报虚拟环境tensorflow的错,而我的是反过来的。所以我很少找到有相应解决方案(头疼)。)

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_anaconda

1.报错的原因,我的理解是python环境相互覆盖了。

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_虚拟环境_02


我们在安装tensorflow这一步时,可能修改了Anaconda原本python环境的路径:

打开Anaconda Prompt命令框(输入)

jupyter kernelspec list

结果:
(base环境下)

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_虚拟环境_03


(tensorflow环境下)

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_tensorflow_04


可以发现他们共用一个内核,我们进去该路径文件看看:

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_python_05

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_虚拟环境_06

它们都共用tensorflow虚拟环境下的python,此时你改成你自己的annconda环境下的python,这个错就不会出现了,你的jupyter也回归正常了(不妨试一试)。

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_anaconda_07

但你的tensorflow的环境访问路径就出现问题了,怎么说(识别不了,因为环境是不在你的tensorflow下)。

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_虚拟环境_08

2.怎样解决

这里也说到为什么要增加内核的原因,因为你安装的tensorflow虚拟环境不包含很多库,例如matplotlib、numpy…;当你不用tensorflow框架时,但你想导其他包,一个一个安装有点麻烦。

进去tensorflow环境:

#装ipykernel
pip install ipykernel -i https://pypi.douban.com/simple

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_python_09


继续执行命令:

python -m ipykernel install --user --name tensorflow --display-name "Python [anaconda]"
#定义名字随你自己取

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_python_10


这时该路径,多了一个文件tensorflow,进去修改路径:

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_python_11


sd下载后无法找到启动所需的Python的组件 找不到python37.dll_tensorflow_12


此时,重新启动jupyter(tensorflow),发现有两个内核可以自由切换:

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_anaconda_13


tensorflow(没有matplotlib)运行报错:

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_python_14


切换anaconda环境运行无误:

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_tensorflow_15

3.总结

这种方法算是间接解决两个内核环境相互覆盖的方法吧,但是实际没有是从anaconda角度出发改变访问内核路径,而是从tensorflow环境下改变它能访问两者内核环境,你打开anaconda的jupyter可能还是会跳出出来,但是用tensorflow的jupyter是不会出错的。

sd下载后无法找到启动所需的Python的组件 找不到python37.dll_python_16