Conda环境在Jupyter Notebook中未显示

567

我安装了Anaconda(带有Python 2.7),并在名为tensorflow的环境中安装了Tensorflow。我可以在那个环境中成功导入Tensorflow。

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

奇怪的是,当我在Jupyter的主页上打开Conda标签时,我可以看到这两个环境。但是当我打开Files标签,并尝试new一个notebook时,我仍然只得到一个内核。

我看了一下这个问题: Link Conda environment with Jupyter Notebook 但是我的电脑上不存在~/Library/Jupyter/kernels这样的目录!这个Jupyter目录只有一个名为runtime的子目录。

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


6
conda install ipykernel 看起来会在环境中安装 jupyter... 我有什么遗漏吗? - Dror
1
据推测,ipykernel依赖于Jupyter? - kevinkayaks
4
似乎不再起作用了...请看下面Andreas的回答。 - Casey L
1
@ThomasK,这仅在使用nb_conda或手动设置内核时才有效,如问题中所建议的那样。否则,它实际上会使事情变得非常混乱。可执行文件jupyter将指向环境内部的可执行文件,但系统的jupyter-notebook将被启动(如果已安装),因此不会使用默认内核的环境。 - lumbric
1
我在这个问答中编写了一份全面的调试指南:https://dev59.com/_FMH5IYBdhLWcg3w1Dn0#58068850 - lumbric
请参见以下链接:https://dev59.com/Gl0a5IYBdhLWcg3wTHFt - Jason S
26个回答

862

我认为其他答案不再起作用了,因为conda停止自动设置环境为jupyter内核。您需要按以下方式手动为每个环境添加内核:

source activate myenv
pip install ipykernel
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 另请参见this issue

补充说明: 您应该能够使用conda install nb_conda_kernels安装nb_conda_kernels软件包,以自动添加所有环境,请参见https://github.com/Anaconda-Platform/nb_conda_kernels


47
今天是否有可能将最新的解决方案进行标记? - N. CHATURV3DI
4
只有这个方法对我起了作用!conda install nb_conda并没有起作用。谢谢! - Deil
9
截至2018年4月,安装 nb_conda_kernels 对我很有效(使用的是 Python 3.6.4conda 4.3.27jupyter 4.4.0)。 - wflynny
4
更正之前的评论:新的环境不仅仅是第一次打开没有出现。在你再次取消激活并激活该环境,然后打开Jupyter之后,它会正确显示。 - R71
42
如果这个方法对你没用,尝试运行 conda install ipykernel。假设你已经在环境中安装了它。 - Ken Myers
显示剩余17条评论

274
如果您的环境没有显示出来,请确保您已经安装了以下内容:
  • 在Jupyter环境中安装nb_conda_kernels
  • 在Python环境中安装ipykernelipywidgets,请注意ipywidgets是为了启用一些Juptyer功能,而不是为了环境可见性。详情请参考相关文档

Anaconda文档指出:

nb_conda_kernels should be installed in the environment from which you run Jupyter Notebook or JupyterLab. This might be your base conda environment, but it need not be. For instance, if the environment notebook_env contains the notebook package, then you would run

conda install -n notebook_env nb_conda_kernels

Any other environments you wish to access in your notebooks must have an appropriate kernel package installed. For instance, to access a Python environment, it must have the ipykernel package; e.g.

conda install -n python_env ipykernel

To utilize an R environment, it must have the r-irkernel package; e.g.

conda install -n r_env r-irkernel

For other languages, their corresponding kernels must be installed.

除了Python之外,通过安装适当的*kernel软件包,Jupyter可以访问来自其他很多语言的内核,包括R, Julia, Scala/Spark, JavaScript, bash, Octave,甚至MATLAB
请注意,在最初发布此时,可能存在nb_conda不支持Python 3.6环境的可能原因。
如果其他解决方案无法使Jupyter识别其他conda环境,您始终可以从特定环境中安装和运行jupyter。但是,您可能无法在Jupyter中看到或切换到其他环境。
$ conda create -n py36_test -y python=3.6 jupyter
$ source activate py36_test
(py36_test) $ which jupyter
/home/schowell/anaconda3/envs/py36_test/bin/jupyter
(py36_test) $ jupyter notebook

注意,我在这个笔记本中运行的是Python 3.6.1: enter image description here 请注意,如果您在许多环境中执行此操作,则安装Jupyter到每个环境中所添加的存储空间可能不可取(取决于您的系统)。

@Baktaawar 我注意到了同样的错误。我想要深入探讨这个答案,但遇到了这个问题,也没有时间解决。我认为这是一个应该被报告为 git 问题的 bug。 - Steven C. Howell
我明白了。它无法与Python 3.6一起使用,因为nb_conda不适用于Python 3.6。但是可以使用3.5创建conda环境,然后它就可以工作了。然后可以在Jupyter中更改环境。 - Baktaawar
2
@Baktaawar,请看我的更新答案,演示如何在笔记本中使用Python 3.6。您可以运行Python 3.6环境,只需启动具有该环境的Jupyter即可。Conda环境可以被视为自包含的Python安装。如果您将Jupyter安装到系统Python中,您也只会看到一个Python内核选项。 nb_conda的目的仅是“[提供]从Jupyter内部提供Conda环境和软件包访问扩展”,而不是使您能够从所选的Python安装运行Jupyter。 - Steven C. Howell
2
@StevenC.Howell感谢您解决我的问题。我认为您仍然需要提到,每个您想要用作内核的环境中都需要安装ipykernel - merv
1
嗯,我不确定为什么它可以在没有它的情况下工作。你是对的,他们明确说明应该安装它。我已经将其添加到我的答案中。谢谢! - Steven C. Howell
显示剩余9条评论

123

令人烦恼的是,在您的tensorflow环境中,您可以在不安装该环境下运行jupyter notebook。只需运行:

python -m notebook
(tensorflow) $ conda install jupyter

现在,tensorflow环境应该已经在任何你启动的conda环境下的Jupyter Notebooks中可见,它应该显示为类似于 Python [conda env:tensorflow] 的东西。


6
我遇到了和Thomas K一样的问题,Octavius提供的解决方案也解决了我的问题。但是有一个注意点,如果你安装的是Anaconda的Python 3版本,那么你只能看到当前活跃环境,并且它应该有自己的Jupyter。但是如果你安装的是Anaconda的Python 2版本,那么它可以处理所有环境。 - rkmalaiya
6
在Anaconda的Python2版本中,您也可以执行"conda install nb_conda"来从Jupyter本身管理您的环境。 - rkmalaiya
7
@rkmalaiya是正确的。如果你正在使用Miniconda3或Anaconda3,请在其中一个已安装jupyter notebook的源conda环境中执行conda install nb_conda。然后你可以在jupyter notebook浏览器中切换内核/conda环境。 - Harsha Manjunath
1
可以报告这种方法在2018年9月使用Anaconda 5.2 Python 3.6上有效。 - jdr5ca
25
这个回答很糟糕,因为它鼓励用户在每个环境中安装Jupyter,这是完全不必要的。这个方法之所以可行是因为ipykernel(实际上唯一需要的东西)是jupyter的一个依赖项。 - merv
显示剩余3条评论

115

我必须运行前三个答案中提到的所有命令才能使其工作:

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

12
这对我也很管用,但我不需要conda install nb_conda - Ken Myers
7
精湛的蒸馏! - Bao-Tin Hoang
1
我只需要前三个命令,以便在特定环境内运行jupyter lab时将环境内核显示为选项。 - Dr Fabio Gori
3
我也尝试过,这个方法对我有效。天啊,这个问题真令人沮丧,难以搞清楚。 - Trevor Bye
6
不需要nb_conda!;) - Prayson W. Daniel
显示剩余2条评论

64

在你的新环境中运行conda install ipykernel,这样才能获得一个具有该环境的内核。即使每个环境安装了不同版本,此方法也适用,且不会重新安装Jupyter Notebook。你可以从任何环境启动笔记本,然后就能看到新添加的内核。


16
截至2018年1月,这是最佳答案。如果你在conda环境中简单地运行 conda install ipykernel,Jupyter应该会在启动时自动发现你的内核。最坏的情况是,你可以使用 python -m ipykernel install --user --name mykernel 手动生成内核,但如果它已经被自动发现,你不想这样做,否则它将在内核列表中出现两次。 - colllin
2
这将安装Jupyter及其所有依赖项。它可以工作,但在某种程度上不够优化。 - Quickbeam2k1

29

概述(tldr)

如果您想要'python3'内核始终运行来自启动环境的Python安装,请删除用户'python3'内核,该内核优先于当前环境中的任何内容:

jupyter kernelspec remove python3

完整解决方案

我将提供以下情况的另一种替代且更简单的解决方案:

  • 你已经创建了一个conda环境
  • 此环境已安装jupyter(它也会安装ipykernel)
  • 当你运行命令jupyter notebook并通过单击“新建”下拉菜单中的'python3'来创建一个新的notebook时,该notebook会从base环境而不是当前环境中执行python。
  • 你希望使用在任何环境内启动“python3”启动一个新笔记本,以执行该环境中的Python版本,而不是base环境的Python版本。

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

目前得到最高投票的答案确实可行,但还有一个替代方案。 它说要执行以下操作:

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

这将使您有使用test_env环境的选项,无论从哪个环境启动jupyter笔记本。但是,使用'python3'启动笔记本仍将使用基本环境中的Python安装。

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

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

Jupyter在这里所做的是通过搜索三条不同的路径查找内核。 它从用户(User),到环境(Env),再到系统(System)。有关它为每个操作系统搜索的路径的更多详细信息,请参见此文档

上面的两个内核都在用户路径(User path)中,这意味着无论从哪个环境启动Jupyter Notebook,它们都将可用。 这也意味着,如果还有另一个环境级别的'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'内核。
用户'python3'内核优先于任何Env 'python3'内核。通过移除它,活动环境中的'python3'内核被暴露出来,并能够每次选择。这消除了手动创建内核的需要。从软件开发的角度来看,更希望将自己隔离在单一环境中。运行与主机环境不同的内核似乎并不自然。
同时,似乎默认情况下并不为所有人安装此用户'python3',因此并不是每个人都会遇到这个问题。

python -m ipykernel install --user --name test_env --display-name "Python (test_env)" 运行得非常好。谢谢。 - slobodan.blazeski

24

将conda环境添加到Jupyter中:

Anaconda Prompt中:

  1. 运行 conda activate <env name>

  2. 运行 conda install -c anaconda ipykernel

  3. 运行 python -m ipykernel install --user --name=<env name>

    ** 在 conda 4.8.3 4.11.0 上测试通过


似乎第三步是让“env”在JupyterLab中显示的重要步骤。感谢这个提示。<br> 3. 运行 python -m ipykernel install --user --name=<env name> - semmyk-research

20
    $ conda install nb_conda_kernels

(在您运行jupyter笔记本的conda环境中)将自动使所有conda环境可用。要访问其他环境,必须安装各自的内核。这是参考


这不就是重申了一下 https://dev59.com/jVkS5IYBdhLWcg3woIFR#48349338 的内容吗? - merv
1
这看起来像是最简单的方法。 - Decula

15

以下方法适用于我在Windows 10操作系统下的最新解决方案:

1)进入conda环境(激活你的环境名)

2)conda install -n your_env_name ipykernel

3)python -m ipykernel install --user --name build_central --display-name "your_env_name"

(注意:在第3步中,要将“your_env_name”用引号括起来)


14
nb_conda_kernels软件包是使用conda最好的方法来使用jupyter。它具有最小的依赖和配置,允许您从在不同环境中运行的jupyter笔记本中使用其他conda环境。引用其文档

安装

这个软件包被设计为仅使用conda进行管理。它应该安装在您运行Jupyter Notebook或JupyterLab的环境中。这可能是您的base conda环境,但也可能不是。例如,如果环境notebook_env包含笔记本软件包,则可以运行

conda install -n notebook_env nb_conda_kernels

您希望在笔记本中访问的任何其他环境都必须安装适当的内核软件包。例如,要访问Python环境,它必须安装ipykernel软件包;例如

conda install -n python_env ipykernel

要使用R环境,它 必须安装r-irkernel软件包;例如。

conda install -n r_env r-irkernel

对于其他语言,必须安装其相应的内核

然后,您需要做的就是启动jupyter笔记本服务器:

conda activate notebook_env  # only needed if you are not using the base environment for the server
# conda install jupyter # in case you have not installed it already
jupyter

enter image description here


尽管有大量的答案和@merv的努力来改善它们,但仍然很难找到一个好的答案。我将其设为CW,请投票或改进它!



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