我安装了Anaconda(使用Python 2.7),并在一个名为Tensorflow的环境中安装了Tensorflow。我可以在这个环境中成功导入Tensorflow。

问题是Jupyter Notebook无法识别我刚刚创建的新环境。无论我是从GUI Navigator还是tensorflow env中的命令行启动Jupyter Notebook,菜单中只有一个名为Python [Root]的内核,并且不能导入tensorflow。当然,我多次点击这个选项,保存文件,重新打开,但这些都没有帮助。

奇怪的是,当我打开Jupyter首页上的Conda标签时,我可以看到这两个环境。但是当我打开文件选项卡,并尝试新建一个笔记本时,我仍然只有一个内核。

我看了这个问题: 连接Conda环境与Jupyter Notebook 但是在我的电脑上没有~/Library/Jupyter/kernels这样的目录!这个Jupyter目录只有一个称为runtime的子目录。

我真的很困惑。Conda环境应该自动成为内核吗?(我在https://ipython.readthedocs.io/en/stable/install/kernel_install.html上手动设置了内核,但被告知没有找到ipykernel。)


当前回答

可能的特定渠道问题

我有这个问题(再次),原来我从conda-forge频道安装;将其移除并从蟒蛇通道重新安装,而不是为我修复它。

更新:我在一个新的env中再次遇到了同样的问题,这次我确实从anaconda通道安装了nb_conda_kernels,但我的jupyter_client来自conda forge通道。卸载nb_conda_kernels并重新安装会将其更新到更高优先级的通道。

所以请确保你从正确的渠道安装:)

其他回答

在我的例子中,使用Windows 10和conda 4.6.11,通过运行这些命令

conda install nb_conda

conda install -c conda-forge nb_conda_kernels

在我使用conda Jupyter笔记本从同一命令行打开Jupyter后,从终端同时有环境活动并没有做这项工作。

显然,解决方案是从Anaconda Navigator打开Jupyter,进入我的环境:打开Anaconda Navigator,在Environments中选择环境,按下所选环境的“播放”按钮,并选择“用Jupyter Notebook打开”。

Anaconda Navigator中的环境从选定的环境中运行Jupyter

我不认为其他答案是工作了,因为conda停止自动设置环境作为jupyter内核。您需要手动为每个环境添加内核,方法如下:

source activate myenv
python -m ipykernel install --user --name myenv --display-name "Python (myenv)"

如下所示:http://ipython.readthedocs.io/en/stable/install/kernel_install.html#kernels-for-different-environments 请参见本期。

附录: 您应该能够使用conda install nb_conda_kernels安装nb_conda_kernels包来自动添加所有环境,请参阅https://github.com/Anaconda-Platform/nb_conda_kernels

我也遇到过类似的问题,我找到了一个适用于Mac、Windows和Linux的解决方案。它需要上面答案中的几个关键成分:

为了能够看到conda env在Jupyter笔记本,你需要:

the following package in you base env: conda install nb_conda the following package in each env you create: conda install ipykernel check the configurationn of jupyter_notebook_config.py first check if you have a jupyter_notebook_config.py in one of the location given by jupyter --paths if it doesn't exist, create it by running jupyter notebook --generate-config add or be sure you have the following: c.NotebookApp.kernel_spec_manager_class='nb_conda_kernels.manager.CondaKernelSpecManager'

您可以在终端看到的环境:

在Jupyter实验室,你可以看到相同的env上面的笔记本和控制台:

当你打开笔记本时,你可以选择你的环境:

安全的方法是创建一个特定的env,从中运行envjupyter lab命令的示例。激活你的环境。然后添加jupyter实验室扩展示例jupyter实验室扩展。然后你就可以运行木星实验室了

我不得不运行前3个答案中提到的所有命令来让它工作:

conda install jupyter
conda install nb_conda
conda install ipykernel
python -m ipykernel install --user --name mykernel

总结(tldr)

如果你想让'python3'内核总是在它启动的环境中运行Python安装,删除User 'python3'内核,它优先于当前环境:

jupyter kernelspec remove python3

完整的解决方案

我将针对以下情况发布一个替代和更简单的解决方案:

您已经创建了一个conda环境 这个环境已经安装了jupyter(它也安装了ipykernel) 当您运行命令jupyter notebook并通过单击“new”下拉菜单中的“python3”创建一个新notebook时,该notebook将从基本环境而不是当前环境执行python。 您可能希望在任何环境中启动带有“python3”的新笔记本时,都会从该环境执行Python版本,而不是从基础环境执行

在解决方案的其余部分中,我将使用“test_env”作为环境的名称。另外,注意'python3'是内核的名称。

目前票数最高的答案确实有效,但还有另一种选择。它说要做以下事情:

python -m ipykernel install --user --name test_env --display-name "Python (test_env)"

这将为您提供使用test_env环境的选项,而不管您从哪个环境启动jupyter notebook。但是,使用'python3'启动笔记本电脑仍将使用基本环境中的Python安装。

可能发生的情况是存在一个用户python3内核。运行命令jupyter kernelspec list列出所有环境。例如,如果你有一个mac,你将返回以下(我的用户名是Ted)。

python3       /Users/Ted/Library/Jupyter/kernels/python3

木星在这里所做的是在三条不同的路径上寻找内核。它从用户,到环境,到系统。有关它搜索每个操作系统的路径的详细信息,请参阅本文档。

上面的两个内核都在User路径中,这意味着无论您从哪个环境启动jupyter笔记本,它们都是可用的。这也意味着如果在环境级别上存在另一个“python3”内核,那么您将永远无法访问它。

对我来说,从你启动笔记本电脑的环境中选择“python3”内核应该在该环境中执行Python更有意义。

你可以通过在操作系统的Env搜索路径中查看是否有另一个'python3'环境(参见上面文档的链接)。对于我来说(在我的mac上),我发出了以下命令:

 ls /Users/Ted/anaconda3/envs/test_env/share/jupyter/kernels

我确实在那里列出了一个'python3'内核。

多亏了这个GitHub问题评论(看看第一个响应),你可以用以下命令删除用户'python3'环境:

jupyter kernelspec remove python3

现在当你运行jupyter kernelspec list时,假设test_env仍然是活动的,你会得到以下结果:

python3       /Users/Ted/anaconda3/envs/test_env/share/jupyter/kernels/python3

注意,这个路径位于test_env目录中。如果您创建一个新环境,安装jupyter,激活它,并列出内核,您将得到另一个位于其环境路径下的'python3'内核。

User 'python3'内核优先于任何Env 'python3'内核。通过移除它,活动环境“python3”内核就被公开了,并且每次都可以被选择。这消除了手动创建内核的需要。在软件开发方面,它也更有意义,因为人们希望将自己隔离到一个单一的环境中。运行与宿主环境不同的内核似乎不太自然。

默认情况下,似乎并不是每个人都安装了这个User 'python3',所以并不是每个人都遇到了这个问题。