错误:在 Jupyter Notebook (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-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']

木星:

 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 子目录中,它正在寻找模块。所以我尝试了两件事。首先,在运行我的笔记本之前,在我的 .bash_profile 中添加我的 JUPYTER_PATH 的路径。

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

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

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

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

任何关于为什么 scikit-learn 没有导入我的 Jupyter Notebook 的想法都将不胜感激。还有更多我可以检查的东西吗?我该如何让它发挥作用?

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

编辑:我在导入其他包时没有问题,比如 numpyscipy

原文由 AstroAT 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

事实证明,删除 ~/Library/Jupyter/kernels 文件夹并重新启动我的笔记本就可以了。尽管看起来 jupyter kernelspec list 中的内核是我所期望的。尽管如此,它现在正在工作。看来这不是 sklearn 专有问题。我基本上是按照 这个人写的。

原文由 AstroAT 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 Louise Davies 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进