我在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笔记本的想法都将不胜感激。还有什么我可以查的吗?我该如何让它发挥作用?
我尝试过激活/停用我的环境,重新启动内核等,但都没有成功。
编辑:我导入其他包没有问题,比如numpy
或scipy
原来删除~/Library/Jupyter/kernels
文件夹并重新启动我的笔记本就成功了。尽管jupyter kernelspec list
中的内核似乎是我所期望的。尽管如此,它现在正在发挥作用。这似乎不是sklearn
独有的问题。我基本上遵循了此人写道。
确保同时安装了numpy
和scipy
-scikit-learn
依赖于它们,但不会为您安装它们。
此外,安装它们后,请重新启动笔记本服务器。
有一个简单的解决方案,那就是使用Anaconda Navigator GUI手动安装scikit learn。因此,首先选择一个您打算在其中工作的环境,或者创建一个除基本(根)级别之外的新环境。接下来,启动Anaconda Navigator,方法是启动应用程序,或者在命令提示符下键入"Anaconda Navigator",前提是已经激活了适当的环境。接下来,单击GUI左侧面板上的图标,转到"Environments"(环境)窗口。然后,选择您之前决定使用的更高级别的环境。在右侧面板上,您现在应该可以看到此环境中所有已安装的"conda"软件的列表。之后,在右侧面板顶部"通道"按钮的左侧字段中选择"未安装"。从列表中选择scikit learn,并选中其名称左侧的框。最后,单击右下角显示的"应用"按钮来安装软件。现在你应该准备好了。
Anaconda Navigator GUI 屏幕截图