在 virtualenv 中运行 Jupyter notebook:安装的 sklearn 模块不可用

Posted

技术标签:

【中文标题】在 virtualenv 中运行 Jupyter notebook:安装的 sklearn 模块不可用【英文标题】:Running Jupyter notebook in a virtualenv: installed sklearn module not available 【发布时间】:2017-07-15 22:40:59 【问题描述】:

我已经安装了一个创建的 virtualenv ma​​chinelearn 并在该环境中安装了一些 python 模块(pandas、scipy 和 sklearn)。

当我运行 jupyter notebook 时,我可以在我的笔记本中导入 pandas 和 scipy - 但是,当我尝试导入 sklearn 时,我收到以下错误消息:

import sklearn

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-8fd979e02004> in <module>()
----> 1 import sklearn

ImportError: No module named 'sklearn'

我可以在命令行中导入所有模块 - 所以我知道它们已成功安装:

(machinelearn) me@yourbox:~/path/to/machinelearn$ python -c "import pandas, scipy, sklearn"
(machinelearn) me@yourbox:~/path/to/machinelearn$ 

如何在虚拟环境中运行的 jupyter notebook 中导入 sklearn?

【问题讨论】:

我认为您没有使用正确的 python 可执行文件启动您的笔记本。它写在页面的右侧,应该有一个下拉菜单。检查它是否是可通过 virtualenv 而不是 root 安装的 conda。 【参考方案1】:

你可能还没有在你的 virtualenv 中安装 jupyter / IPython。请尝试以下操作:

python -c "import IPython"

并检查在您的$PATH 中找到的jupyter 命令是否来自您的venv 的bin 文件夹:

which jupyter

对于 powershell 控制台中的 windows 用户,您可以使用以下命令检查您的 $env:Path 中的 jupyter 命令是否是您 venv 的 Scripts 文件夹中的命令:

get-command jupyter

编辑:如果这是问题所在,只需在您的 venv 中运行 python -m pip install jupyter

编辑 2:实际上您可能还需要:

python -m ipykernel install --user --name=my-virtualenv-name

然后在jupyter用户界面切换名为“my-virtualenv-name”的内核。

编辑 3:也许最后一个命令中的 --user 标志是个坏主意:

python -m ipykernel install --name=my-virtualenv-name

【讨论】:

不,在我的 virtenv 中安装 jupyter 并没有解决问题,我仍然收到错误消息:ImportError: No module named 'sklearn' > ImportError: No module named 'sklearn' 然后它确实解决了 jupyter 问题。你也只需要在你的venv中pip install scikit-learn @ClimbsRocks Now run the kernel "self-install" script: python -m ipykernel install --user --name=my-virtualenv-name Replacing the --name parameter as appropriate. 的回答为我解决了问题 不要忘记在 jupyter 中切换内核。 ipykernel install 有效,但不幸的是在全局范围内添加了一个新内核,即在未在此虚拟环境中运行的会话上。【参考方案2】:

另一种方法是安装一个全局 jupyter,但指向不同的内核作为后端运行。

他们的文档中概述了这种方法: http://help.pythonanywhere.com/pages/IPythonNotebookVirtualenvs

复制以下内容以防链接中断: 你可以为你的 IPython notebook 使用 virtualenv。请按照以下步骤操作:

将 ipython 内核模块安装到您的 virtualenv 中

workon my-virtualenv-name  # activate your virtualenv, if you haven't already
pip install ipykernel

现在运行内核“自安装”脚本:

python -m ipykernel install --user --name=my-virtualenv-name

根据需要替换 --name 参数。

您现在应该能够在 IPython 笔记本菜单中看到您的内核:内核 -> 更改内核并能够切换到它(您可能需要刷新页面才能显示在列表中)。从那时起,IPython 会记住该笔记本使用哪个内核。

【讨论】:

我可以看到内核在jupyter中找到并连接到它,但它仍然找不到我的模块。想法? @climbsrocks 是的,正如 Elliiptica 所说,我已经这样做了,但仍然无法导入包。有什么想法吗?【参考方案3】:

使用 python3 -m venv 命令创建 virtualenv

我遇到了和你一样的问题。 在我的例子中,我使用命令创建了 virtualenv

python3 -m venv ./my_virtual_env --system-site-packages

问题是我无法在虚拟环境中安装 jupyter,因为它已经在 system-site-package 中(当您尝试安装它时,它会告诉您“要求已经满足”)。

要安装 jupyter,(在第一个实例中,pip 不会使用此命令在您的虚拟环境中安装)但仍然可以访问系统站点包,您可以运行:

python3 -m venv ./my_virtual_env

激活您的虚拟环境,运行pip3 install jupyter(和pip3 install pip),然后打开文件./my_virtual_env/pyvenv.cfg 中的选项include-system-site-packages。

在您的环境停用和重新激活后,您将可以访问系统站点包。

使用 virtualenv 命令创建 virtualenv

给定this answer,您可以通过创建文件 ./my_virtual_env/lib/python3.4/no-global-site-packages.txt 来阻止对系统站点包的访问, 并通过删除它来取回访问权限。

【讨论】:

【参考方案4】:

要将 Jupyter 笔记本与虚拟环境(使用 virtualenvwrapper)以及安装在该环境中的软件包一起使用,请按照以下步骤操作:

    创建一个虚拟环境

    mkvirtualenv --no-site-packages --python=/your/python/path your_env_name
    

    激活虚拟环境

    workon your_env_name
    

    安装 Jupyter 和其他软件包

    pip install jupyter, numpy
    

    将新内核添加到您的 Jupyter 配置中

    ipython kernel install --user --name=your_env_name
    

    完成。您现在可以在虚拟环境下使用 Jupyter notebook。

    jupyter-notebook
    

免责声明:该问题已得到解答,但隐藏在其中一个回复中。我用谷歌搜索并花了一些时间找到正确的答案。所以我只是总结一下,以便有相同问题的人可以轻松跟进。

【讨论】:

太棒了,这直接对我有用。在第 1 步中,--python 标志对我来说是不必要的(不知道该放什么,所以把它省略了),第 2 步对我来说也是多余的。 这才是真正的答案......顺序对于完成这项工作至关重要。 从我的 env 被激活的同一个终端启动 jupyter-notebook 对我有用..谢谢!!! 第 4 步使这是一个黄金答案 - 非常感谢!高度可收藏。【参考方案5】:

如果您使用以下方法创建了虚拟环境,您仍然可以在虚拟环境中安装 jupyter:

python -m venv --system-site-packages path/to/my-venv

只需这样做:

activate-your-env
pip install -I jupyter

你现在准备好了

jupyter notebook

【讨论】:

【参考方案6】:

假设 jupyter 安装在您的机器上,而不是虚拟环境中。

在 Jupyter notebook 中使用虚拟环境

VENV_NAME = "你的虚拟环境名称"

1) virtualenv VENV_NAME

2) source venv/bin/activate

3) 如果不存在,请添加此包:pip3 install ipykernel

4) 然后执行这个命令:ipython kernel install --user --name=VENV_NAME

5) 现在打开 Jupyter Notebook 并在更改内核中选择 VENV_NAME

6) 要安装新软件包,请在终端中执行 pip3 install &lt;PACKAGE NAME&gt; 并重复第 4 步。

希望对你有帮助!

【讨论】:

5在哪里执行?在激活的 VENV_NAME 中?为什么每次安装包都要重复第 4 步??【参考方案7】:

不全局添加新内核的解决方案!!

    通过创建一个新的虚拟环境
python3 -m virtualenv envname

    激活您的环境并在其中安装 jupyter
pip install jupyter

在安装 jupyter 之前,您必须确保的一件事是您没有安装以下软件包。

ipykernel             
ipython               
ipython-genutils      
ipywidgets            
jupyter               
jupyter-client        
jupyter-console     
jupyter-core 

如果您以前安装过它们,请先通过pip uninstall 卸载它们。

    在激活的 virtualenv 中安装所需的包并在其中启动 jupyter,瞧!

【讨论】:

以上是关于在 virtualenv 中运行 Jupyter notebook:安装的 sklearn 模块不可用的主要内容,如果未能解决你的问题,请参考以下文章

Python---virtualenv + Tensorflow + jupyter notebook

无法在 Jupyter notebook python 中停用 virtualenv

为啥jupyter notebook老是安装不了

jupyter怎么打不开?

数据科学家的一种工作环境 – virtualenv和Jupyter Notebook

Jupyter没有从Virtual Environment加载模块