错误:在Jupyter Notebook中找不到模块(sklearn)

时间:2017-11-14 04:57:10

标签: python-3.x scikit-learn jupyter-notebook

我在Jupyter笔记本中导入scikit-learn时遇到问题,我不知道为什么这不起作用。我不记得以前在使用其他软件包时遇到此问题。我已经看到几个人与这个特定模块有类似问题的线程,但没有提出的检查已经解决了我的问题,也没有向我透露可能有什么问题。我试图在下面添加尽可能多的信息,试图找出为什么拒绝工作。

我使用anaconda管理我的软件包,scikit-learn安装如下:

source activate python3
conda install scikit-learn
Fetching package metadata .............
Solving package specifications: .

# All requested packages already installed.
# packages in environment at /Users/overaa/anaconda/envs/python3:
#
scikit-learn              0.19.1           py36hffbff8c_0  

现在,如果我直接从命令行启动python会话,import sklearn按预期工作,并正确导入模块。在Jupyter中做同样的结果

ModuleNotFoundError: No module named 'sklearn'

我检查了很多东西。首先,确保我的jupyter和jupyter-notebook指向正确的环境

which jupyter
/Users/overaa/anaconda/envs/python3/bin/jupyter
which jupyter-notebook
/Users/overaa/anaconda/envs/python3/bin/jupyter-notebook

所以笔记本检查了。

然后从命令行python会话(在我启动笔记本的环境中):

>>> import sklearn
>>> sklearn.__file__
'/Users/overaa/anaconda/envs/python3/lib/python3.6/site_packages/sklearn/__init__.py'

所以scikit-learn也安装在合适的环境中。

现在比较我正在运行相同的版本;

从命令行:

>>> print(sys.version)
3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:04:09)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]

来自Jupyter笔记本:

print(sys.version)
3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:04:09
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]

比较包路径。

从命令行:

import site
print(site.getsitepackages())
['/Users/overaa/anaconda/envs/python3/lib/python3.6/site-packages']

来自Jupyter笔记本:

import site
print(site.getsitepackages())
['/Users/overaa/anaconda/envs/python3/lib/python3.6/site-packages']

同样适用于我的sys.path

命令行:

>>> print(sys.path)
['', '/Users/overaa/anaconda/envs/python3/lib/python36.zip', 
'/Users/overaa/anaconda/envs/python3/lib/python3.6', 
'/Users/overaa/anaconda/envs/python3/lib/python3.6/lib-dynload', 
'/Users/overaa/anaconda/envs/python3/lib/python3.6/site-packages', 
'/Users/overaa/anaconda/envs/python3/lib/python3.6/site_packages/setuptools-27.2.0-py3.6.egg']

Jupyter:

print(sys.path)
['', '/Users/overaa/anaconda/envs/python36/lib/python36.zip', 
'/Users/overaa/anaconda/envs/python36/lib/python3.6', 
'/Users/overaa/anaconda/envs/python36/lib/python3.6/lib-dynload', 
'/Users/overaa/anaconda/envs/python36/lib/python3.6/site-packages', 
'/Users/overaa/anaconda/envs/python36/lib/python3.6/site-packages/setuptools-27.2.0-py3.6.egg', 
'/Users/overaa/anaconda/envs/python36/lib/python3.6/site-packages/IPython/extensions', 
'/Users/overaa/.ipython']

所以一切都是一样的,除了包含setuptools的目录在命令行版本和Jupyter版本之间有所不同。我还注意到scikit-learn似乎安装在site_packages子目录中,而不是site-packages子目录中,这是Jupyter似乎在寻找模块的地方。所以我尝试了两件事。首先,在运行我的笔记本之前,在我的.bash_profile中添加JUPYTER_PATH的路径。

export JUPYTER_PATH="/Users/overaa/anaconda/envs/python36/lib/python3.6/site-packages:$JUPYTER_PATH"

在尝试导入sys.path

之前,我还尝试直接在jupyter笔记本中将其添加到我的scikit-learn
sys.path.append("/Users/overaa/anaconda/envs/python3/lib/python3.6/site_packages")

两者都无济于事,sklearn仍然拒绝在我的笔记本中导入。

关于为什么scikit-learn未导入我的Jupyter笔记本的任何想法都将受到高度赞赏。还有更多我可以检查的东西吗?我该如何让它发挥作用?

我尝试过激活/停用我的环境,重新启动内核等也没有成功。

编辑:导入其他软件包时没有问题,例如numpyscipy

3 个答案:

答案 0 :(得分:2)

原来,删除~/Library/Jupyter/kernels文件夹并重新启动我的笔记本就可以了。即使jupyter kernelspec list中的内核看起来像我预期的那样。不过它现在正在运作。它似乎不是sklearn独家问题。我基本上遵循了什么 this person wrote.

答案 1 :(得分:1)

确保您同时安装了numpyscipy - scikit-learn取决于他们,但不会为您安装。

此外,安装后,重新启动笔记本电脑服务器。

答案 2 :(得分:0)

对此有一个简单的解决方案,即使用Anaconda-Navigator GUI手动安装scikit-learn。因此,首先选择您打算使用的环境或创建除基础(根)级别以外的新环境。接下来,通过启动应用程序或在已激活适当环境的情况下在命令提示符下键入“ anaconda-navigator”来启动Anaconda-Navigator。接下来,通过在左侧面板上单击其图标,转到GUI上的“环境”窗口。然后,选择您先前决定使用的更高级别的环境。现在,在右侧面板上,您应该看到此环境中所有已安装的“ conda”软件的列表。然后,在右侧面板顶部“通道”按钮的紧靠左侧的字段中选择“未安装”。从列表中选择scikit-learn,然后选中其名称左侧的框。最后,单击右下角显示的“应用”按钮以安装软件。现在您应该已经准备就绪。

Screenshot of Anaconda-Navigator GUI