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文件后,菜单栏中的服务->改变服务->我们要的虚拟环境

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

  • 相关阅读:
    Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)
    文件内容操作篇clearerr fclose fdopen feof fflush fgetc fgets fileno fopen fputc fputs fread freopen fseek ftell fwrite getc getchar gets
    文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write
    嵌入式linux应用程序调试方法
    version control system:git/hg/subversion/cvs/clearcase/vss。software configruation management。代码集成CI:Cruisecontrol/hudson/buildbot
    最值得你所关注的10个C语言开源项目
    如何记录linux终端下的操作日志
    CentOS 5.5 虚拟机安装 VirtualBox 客户端增强功能
    sizeof, strlen区别
    C/C++嵌入式开发面试题
  • 原文地址:https://www.cnblogs.com/damin1909/p/12692217.html
Copyright © 2011-2022 走看看