zoukankan      html  css  js  c++  java
  • “jupyter notebook 不能导入python库但是终端上可以实现”的问题的解决

    在使用jupyter notebook的过程中,创建了一个新的环境(anaconda中env)后遇到了这样一个问题,就是:

    在jupyter notebook上运行程序,中间发现有一个python库未曾下载,因此,我们调出了cmd 命令窗口,把我们需要的python通过pip的形式下载完成,并且在cmd命令窗口上已经实测“已经下载安装成功”,但是jupyter notebook中仍然显示没有下载该模块。

    对于该问题,我们通过以下命令查看import是直接从哪个路径中导入python库的

    import sys
    print(sys.path) # 输出的是一个列表
    

    我们发现输出结果中没有我们创建的新环境的路径,比如:我们创建的环境为XXX,则在下载的Python库一般在anaconda3envXXXlibsite-package,也可以pip install xyz导入一下你要下载的python库,看看它下载到哪了。

    因此我们要做的就是把这个路径加入到sys.path中,也就是sys.path.append("anaconda3envXXXlibsite-package")

    ++++++++++++++++++++++手动分割线+++++++++
    上述提供的方法有一个缺点,就是:

    对于每次终端下启动的jupyter notebook,我们都需进行上述操作来解决我们的问题,不存在永久解决的,因此,我们希望能有一个永久解决的办法。

    分别在电脑终端和jupyter notebook中、不同的anaconda环境下执行下述操作(假设我们有两个anaconda环境,分别为env1和env2)

    import sys
    sys.executable
    

    我们发现,
    在终端下的运行结果,分别是D:\anaconda3\envs\env1\python.exeD:\anaconda3\envs\env2\python.exe
    在jupyter notebook中的运行结果都是D:\anaconda3\envs\env1\python.exe

    所以,可能是由于sys.executable的问题,使得在env2环境下激活的jupyter notebook中无法导入该环境下通过pip或者conda下载的python库

    在终端中直接执行ipython kernelspec list,输出结果为

    [TerminalIPythonApp] WARNING | Subcommand `ipython kernelspec` is deprecated and will be removed in future versions.
    [TerminalIPythonApp] WARNING | You likely want to use `jupyter kernelspec` in the future
    Available kernels:
      python3    C:UsersjluaaAppDataRoamingjupyterkernelspython3
    

    我们打开输出所示的路径的文件,文件内容为:

    {
     "argv": [
      "D:\anaconda3\envs\env1\python.exe",
      "-m",
      "ipykernel_launcher",
      "-f",
      "{connection_file}"
     ],
     "display_name": "Python 3",
     "language": "python"
    }
    

    把其中的D:\anaconda3\envs\env1\python.exe改成D:\anaconda3\envs\env2\python.exe
    那么上面的所说的问题就能完美解决了

    ################继续分割#############################

    用了多日的jupyter notebook,今天突然发现自己陷入了一个误区,就是我们在学习python的时候用的是anaconda,当我们要用python处理不同种类的问题时,显然安装多个版本的anaconda会显得很麻烦,因此,在这里,我们可以通过anaconda的虚拟环境来解决的不同的问题(提一下,就是通过conda create -n env_name python=3.6来创建自己所需的虚拟环境,python版本可以根据所需要配置的python库来确定),那么,对于交互式编程,jupyter notebook必不可少,但是我们jupyter notebook 插件是该安装在什么地方呢?

    不知道别人有没有存在这样的理解误区,本人一直把jupyter notebook当作是每个anaconda虚拟环境下必备的插件,也就是说,如果我们要使用该环境下的python库,就必须通过conda activate env_name切换到该虚拟环境下,之后通过jupyter notebook打开交互式页面,进行编程,这或许就会出现上述本文中最初的那个问题(在本环境下打开的jupyter notebook,为何sys.executable显示的确实另一个虚拟环境的路径呢?),而且我们创建了那么多虚拟环境,为什么jupyter notebook界面上的运行内核一直是python3(本人安装的anaconda3)呢?即使我们在虚拟环境env_name中安装的是python=2.7,jupyter notebook的运行内核依旧是python3呢?

    所以,jupyter notebook是我们安装的anaconda对应的插件,其内核也就是anaconda所对应的python版本,而对于在anaconda这个大的环境下创建的虚拟环境以及在这个环境下启动的jupyter notebook都是anaconda对应的最原始的那个。如果我们要想在jupyter notebook中切换各个虚拟环境的版本,不需要像前面所说的那样,必须在对应的虚拟换下启动jupyter notebook,我们只需要安装一个插件,就可以直接在jupyter notebook中切换各个运行环境。

    插件安装如下:
    在终端中输入下面命令,

    conda install nb_conda
    

    之后启动jupyter notebook

    此时,jupyter notebook主页中的新建选项为

    我们就可以在我们已经创建的虚拟环境下创建新文件(图中所示,为jupyter notebook主页右上角新建选项中的子选项,由于图片看不清,俺也解决不了,等解决了在换清晰图像吧!)

    如果我们打开已经编辑好的文件,希望通过特定的虚拟环境运行,可以按照如下方式

    内容为:打开ipynb文件后,菜单栏中的服务->改变服务->我们要的虚拟环境

    这就很完美!
    通过这样直接切换虚拟环境的方式,本文章最初的那个问题也就迎刃而解了

  • 相关阅读:
    VS Code 快捷键(中英文对照版)
    Linux下SVN提交时强制写日志
    如何搞定SVN目录的cleanup问题和lock问题
    Unity3D中利用Action实现自己的消息管理(订阅/发布)类
    Unity3D热更新之LuaFramework篇[03]--prefab加载和Button事件
    Unity3D热更新之LuaFramework篇[02]--用Lua创建自己的面板
    Unity3D热更新之LuaFramework篇[01]--从零开始
    Unity UI性能优化技巧
    Unity中雾效的开启
    解决Unity中模型部件的MeshCollider不随动画一起运动的问题
  • 原文地址:https://www.cnblogs.com/damin1909/p/12692217.html
Copyright © 2011-2022 走看看