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

7
我在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/user_name/anaconda/envs/python3/bin/jupyter
which jupyter-notebook
/Users/user_name/anaconda/envs/python3/bin/jupyter-notebook

所以笔记本电脑检查通过。

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

>>> import sklearn
>>> sklearn.__file__
'/Users/user_name/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/user_name/anaconda/envs/python3/lib/python3.6/site-packages']

来自 Jupyter 笔记本:

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

同样地,对于我的sys.path,在命令行中应该这样使用:
>>> print(sys.path)
['', '/Users/user_name/anaconda/envs/python3/lib/python36.zip', 
'/Users/user_name/anaconda/envs/python3/lib/python3.6', 
'/Users/user_name/anaconda/envs/python3/lib/python3.6/lib-dynload', 
'/Users/user_name/anaconda/envs/python3/lib/python3.6/site-packages', 
'/Users/user_name/anaconda/envs/python3/lib/python3.6/site_packages/setuptools-27.2.0-py3.6.egg']

Jupyter:

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

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

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

在尝试导入scikit-learn之前,我还尝试将它直接添加到我的jupyter笔记本中的sys.path中。

sys.path.append("/Users/user_name/anaconda/envs/python3/lib/python3.6/site_packages")

无论如何,sklearn仍然无法在我的笔记本中导入。
非常感谢任何关于为什么无法将scikit-learn导入到我的Jupyter笔记本中的想法。我还可以检查更多的东西吗?我该如何让它工作起来?
我已经尝试了激活/取消激活我的环境、重启内核等等,但都没有成功。
编辑:我没有导入其他软件包时遇到问题,比如numpyscipy

其他的库,比如说numpy,你可以导入吗? - MB-F
是的,这不是问题。 - AstroAT
3个回答

6
原来,删除~/Library/Jupyter/kernels文件夹并重新启动笔记本就解决了问题。尽管在jupyter kernelspec list中的内核与我预期的相同,但这似乎并不是一个sklearn专有问题。基本上我遵循了这个人写的

2
请确保您已经安装了numpyscipy - scikit-learn依赖于它们但不会为您安装它们。

此外,在安装它们后,请重新启动您的笔记本服务器。


是的,numpyscipy都已安装,并且我从这两个包中导入软件包从未遇到过问题。不幸的是,重新启动笔记本服务器也没有解决问题。 - AstroAT

0

这个问题有一个简单的解决方案,那就是使用Anaconda-Navigator图形用户界面手动安装scikit-learn。首先选择你打算工作或创建新环境除了基本(根)级别的环境。接下来,启动Anaconda-Navigator,可以通过启动应用程序或在命令提示符中键入“anaconda-navigator”来启动,前提是已经激活了正确的环境。接下来,在左侧面板上点击其图标,进入GUI上的“环境”窗口。然后,选择之前决定使用的更高级别的环境。在右侧面板上,您现在应该看到此环境中所有已安装的“conda”软件列表。之后,在右侧面板顶部“Channels”按钮的左侧字段中选择“未安装”。从列表中选择scikit-learn,并选中其名称左侧的复选框。最后,单击显示在右下角的“应用”按钮以安装软件。现在你应该准备好了。

Anaconda-Navigator GUI截图


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接