Jupyter Notebook 导入错误:没有名为'sklearn'的模块。

13

我想在本地运行程序,但在jupyter notebook中出现了一个错误“ImportError: No module named 'sklearn'”。当我在命令行中使用激活和非激活状态的carnd-term1环境时,都可以正常工作。

我已经使用pip、apt-get和conda安装了sklearn,并尝试了conda upgrade scikit-learn,同样在激活和非激活环境下进行了尝试。


(carnd-term1) matt@Malta:~/sdc$ conda upgrade scikit-learn
Fetching package metadata .........
Solving package specifications: .
# All requested packages already installed.
# packages in environment at /home/matt/anaconda3/envs/carnd-term1:
#
scikit-learn 0.18.1 np112py35_1

(carnd-term1) matt@Malta:~/sdc$ python3
Python 3.5.2 | packaged by conda-forge | (default, Jan 19 2017, 15:28:33) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sklearn
>>>

   ...: (carnd-term1) matt@Malta:~/sdc$ ipython
   ...: Python 3.5.2 | packaged by conda-forge | (default, Jan 19 2017, 15:28:33) 
   ...: Type "copyright", "credits" or "license" for more information.
   ...: 
   ...: IPython 5.1.0 -- An enhanced Interactive Python.
   ...: ?         -> Introduction and overview of IPython's features.
   ...: %quickref -> Quick reference.
   ...: help      -> Python's own help system.
   ...: object?   -> Details about 'object', use 'object??' for extra details.
   ...: 
   ...: In [1]: import sklearn
   ...: 
   ...: In [2]: from sklearn.model_selection import train_test_split
   ...: 
   ...: In [3]: (carnd-term1) matt@Malta:~/sdc$ ipython
   ...:    ...: Python 3.5.2 | packaged by conda-forge | (default, Jan 19 2017, 15:28:33) 
   ...:    ...: Type "copyright", "credits" or "license" for more information.
   ...:    ...: 
   ...:    ...: IPython 5.1.0 -- An enhanced Interactive Python.
   ...:    ...: ?         -> Introduction and overview of IPython's features.
   ...:    ...: %quickref -> Quick reference.
   ...:    ...: help      -> Python's own help system.
   ...:    ...: object?   -> Details about 'object', use 'object??' for extra details.
   ...:    ...: 
   ...:    ...: In [1]: import sklearn
   ...:    ...: 
   ...:    ...: In [2]: from sklearn.model_selection import train_test_split
   ...:    ...: 
   ...:    ...: In [3]:

在jupyter notebook中无法正常工作。

有任何想法吗?


你在这个环境中安装了Jupyter Notebook吗? - darthbith
6个回答

7

一般而言,这意味着两者环境不同。最好的检查方法是检查 sys.executable 并确保它符合您的期望。如果使用了您不希望使用的 sys.executable 笔记本电脑,则第一步可能是检查您的路径:

which jupyter
which jupyter-notebook

最可能的问题是笔记本堆栈不在您的conda环境中,您可以通过以下方法解决:
conda install notebook

第二种可能是您安装了一个内核规范(例如,使用ipython kernel install --user),它会覆盖您的环境。您可以使用以下命令查看内核位置:
jupyter kernelspec list

为了确保您在同一环境中安装了IPython内核,您可以执行以下操作:
conda install ipykernel
ipython kernelspec install --sys-prefix

然后,在此之后再次检查 jupyter kernelspec list


1
我按照您的指示尝试了,但即使所有条件都满足,它也没有起作用。然后我意识到我在我的conda安装的python3虚拟环境中。所以我退出了那个笔记本。检查了默认的python版本(没有虚拟环境),它是python 2.7。启动REPL,接着启动jupyter notebook。BOOM我能够从sklearn中使用。在此留下评论,以防它有助于其他人。 - stormfield
我认为我有内核问题,但我没有使用conda,只是普通的pip。那么解决方法是什么? - Evan Zamir

5

让我们学习一种通用的方法来解决这些问题。解决方案非常简单,基本上有三个步骤:

  1. 找到pip软件包安装的位置。
  2. 将该目录添加到路径中。
  3. 最后,导入软件包。

找到pip软件包的安装位置:

!pip show PACKAGE_NAME

如果你在jupyter-notebook中执行命令,请不要忘记加上这个!符号。这将会给你提供该包的路径(可能会包含其他信息)。获取在Location内部给出的路径。

将该目录添加到路径中:这个代码应该在你在jupyter中导入该包之前运行。

import sys
sys.path.append('path/to/the/package')

现在导入该软件包:

import PACKAGE_NAME

因此,对于sklearn:

获取sklearn目录:

!pip show scikit-learn

添加目录:

import sys
sys.path.append('/path/to/sklearn')

例如,如果你正在使用anaconda,那么site-packages文件夹将包含该环境下安装的所有conda包。在这个路径里有我们想要导入的sklearn文件夹。
import sys
sys.path.append('/home/hafiz031/anaconda3/envs/NLP/lib/python3.8/site-packages')

现在按照惯例导入所需的包:
import sklearn

参考资料:

  1. 如何确定 scikit-learn 的版本和安装位置

  2. Python:相对于当前运行的脚本添加到 sys.path 的最佳方法


2
如果您使用虚拟环境,则需要将Notebook安装到环境中:
pip install notebook

0
我尝试了几乎所有的方法,最终这个方法起作用了:
将你的Jupiter笔记本内核从python3.xx.x(除了Ipykernel以外的任何内核)更改为Ipykernel

0

更新软件包可能会解决您的问题

conda upgrade scikit-learn

-1

您可以在使用的任何环境中安装库

pip install sklearn

conda install sklearn

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