我在我的 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 的想法都将不胜感激。还有更多我可以检查的东西吗?我该如何让它发挥作用?
我已经尝试激活/停用我的环境,重新启动内核等,但都没有成功。
编辑:我在导入其他包时没有问题,比如 numpy
或 scipy
原文由 AstroAT 发布,翻译遵循 CC BY-SA 4.0 许可协议
事实证明,删除
~/Library/Jupyter/kernels
文件夹并重新启动我的笔记本就可以了。尽管看起来jupyter kernelspec list
中的内核是我所期望的。尽管如此,它现在正在工作。看来这不是sklearn
专有问题。我基本上是按照 这个人写的。