错误:在Jupyter笔记本(sklearn)中找不到模块



我在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笔记本指向正确的环境

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']

因此,除了包含setuptools的目录在命令行版本和Jupyter版本之间不同之外,一切都是一样的。我还注意到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

原来删除~/Library/Jupyter/kernels文件夹并重新启动我的笔记本就成功了。尽管jupyter kernelspec list中的内核似乎是我所期望的。尽管如此,它现在正在发挥作用。这似乎不是sklearn独有的问题。我基本上遵循了此人写道。

确保同时安装了numpyscipy-scikit-learn依赖于它们,但不会为您安装它们。

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

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

Anaconda Navigator GUI 屏幕截图

相关内容

  • 没有找到相关文章

最新更新