关于anaconda:Conda环境没有出现在Jupyter Notebook中

Conda environments not showing up in Jupyter Notebook

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

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

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

我看了这个问题:
将Conda环境与Jupyter Notebook联系起来
但是我的电脑上没有~/Library/Jupyter/kernels这样的目录!此Jupyter目录只有一个名为runtime的子目录。

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


我不认为其他答案正在发挥作用,因为conda停止自动将环境设置为jupyter内核。您需要以下列方式为每个环境手动添加内核:

1
2
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


令人讨厌的是,在tensorflow环境中,您可以在该环境中运行jupyter notebook而无需安装jupyter。赶紧跑

1
(tensorflow) $ conda install jupyter

并且tensorflow环境现在应该可以在任何conda环境中启动的Jupyter笔记本中看到,如


如果您的环境未显示,则可能未在安装Jupyter的环境中安装nb_conda_kernels。 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

1
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.

1
conda install -n python_env ipykernel

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

1
conda install -n r_env r-irkernel

For other languages, their corresponding kernels must be installed.

请注意,在最初发布此内容时,可能会导致nb_conda尚未支持Python 3.6环境。

如果其他解决方案无法让Jupyter识别其他conda环境,则始终可以在特定环境中安装并运行jupyter。但是,您可能无法从Jupyter内部查看或切换到其他环境。

1
2
3
4
5
$ 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安装到每个环境中所添加的存储空间(取决于您的系统)。


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

1
2
3
4
conda install jupyter
conda install nb_conda
conda install ipykernel
python -m ipykernel install --user --name mykernel


只需在新环境中运行conda install ipykernel,只有这样你才能获得带有这个环境的内核。即使您在每个env中安装了不同的版本,它也不会再次安装jupyter笔记本。您可以从任何环境启动笔记本,您将能够看到新添加的内核。


摘要(tldr)

如果您希望'python3'内核始终从启动它的环境运行Python安装,请删除User'python3'内核,该内核优先于当前环境所使用的内容:

1
jupyter kernelspec remove python3

完整解决方案

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

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

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

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

1
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)。

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

Jupyter在这里做的是搜索寻找内核的三种不同路径。它从User,Env到System。有关其搜索每个操作系统的路径的详细信息,请参阅此文档。

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

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

您可以通过查看操作系统的Env搜索路径来查看是否有另一个"python3"环境(请参阅上面文档的链接)。对我(在我的Mac上),我发出以下命令:

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

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

感谢这个GitHub问题评论(查看第一个响应),您可以使用以下命令删除User'python3'环境:

1
jupyter kernelspec remove python3

现在,当您运行jupyter kernelspec list时,假设test_env仍处于活动状态,您将获得以下信息:

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

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

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

似乎默认情况下并没有为每个人安装此用户'python3',因此不是每个人都面临这个问题。


我们在这个问题上遇到了很多困难,这对我们有用。如果使用conda-forge通道,确保使用conda-forge中的更新包非常重要,即使在Miniconda根环境中也是如此。

所以安装Miniconda,然后执行:

1
2
3
4
5
conda config --add channels conda-forge --force
conda update --all  -y
conda install nb_conda_kernels -y
conda env create -f custom_env.yml -q --force
jupyter notebook

并且您的自定义环境将在Jupyter中显示为可用内核,只要在custom_env.yml文件中列出ipykernel进行安装,如下例所示:

1
2
3
4
5
6
7
8
name: bqplot
channels:
- conda-forge
- defaults
dependencies:
- python>=3.6
- bqplot
- ipykernel

只是为了证明它适用于一堆自定义环境,这里是Windows的屏幕抓取:

enter image description here


1
    $ conda install nb_conda_kernels

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


我遇到了同样的问题,我的新conda环境myenv无法被选为内核或新笔记本。从env中运行jupter notebook给出了相同的结果。

我的解决方案,以及我了解Jupyter笔记本如何识别conda-envs和内核:

使用conda将jupyter和ipython安装到myenv

1
conda install -n myenv ipython jupyter

之后,在任何列出myenv的env之外运行jupter notebook作为内核以及我之前的环境。

1
2
Python [conda env:old]
Python [conda env:myenv]

激活环境后运行笔记本:

1
2
source activate myenv
jupyter notebook

隐藏我所有的其他环境内核,只显示我的语言内核:

1
2
3
python 2
python 3
R

虽然@ coolscitist的答案对我有用,但也有一种方法可以使用完整的jupyter包+ deps来破坏你的内核环境。
它在ipython文档中描述,并且(我怀疑)只有在非基础环境中运行笔记本服务器时才需要。

1
2
3
conda activate name_of_your_kernel_env
conda install ipykernel
python -m ipykernel install --prefix=/home/your_username/.conda/envs/name_of_your_jupyter_server_env --name 'name_of_your_kernel_env'

您可以检查它是否有效

1
2
conda activate name_of_your_jupyter_server_env
jupyter kernelspec list


这真令人沮丧,我的问题是在新构建的conda python36环境中,jupyter拒绝加载"seaborn" - 即使seaborn安装在该环境中。它似乎能够从同一环境中导入大量其他文件 - 例如numpy和pandas但不是seaborn。我在这里和其他线程上尝试了许多修复但没有成功。直到我意识到Jupyter没有从该环境中运行内核python,而是将系统python作为内核运行。尽管在环境中已经存在一个像样的内核和kernel.json。只有在阅读了ipython文档的这一部分之后:
https://ipython.readthedocs.io/en/latest/install/kernel_install.html#kernels-for-different-environments
并使用这些命令:

1
2
source activate other-env
python -m ipykernel install --user --name other-env --display-name"Python (other-env)"

我能够很好地完成所有事情。 (我实际上并没有使用-user变量)。

我还没想到的一件事是如何将默认python设置为"Python(other-env)"。目前,从主屏幕打开的现有.ipynb文件将使用系统python。我必须使用内核菜单"更改内核"来选择环境python。


这在Windows 10和最新的解决方案中适用于我:

1)进入conda环境(激活your_env_name)

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"周围的引号)


nb_conda_kernels包是jupyterconda一起使用的最佳方式。通过最少的依赖关系和配置,它允许您使用在不同环境中运行的jupyter笔记本中的其他conda环境。引用其文档:

Installation

This package is designed to be managed solely using conda. It 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.

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

1
2
3
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,所以请把它投到顶部或改进它!


按照iPython文档中的说明将不同的conda环境添加到Jupyter Notebook中可供选择的内核列表中。总之,在安装ipykernel之后,必须在终端中逐个激活每个conda环境并运行命令python -m ipykernel install --user --name myenv --display-name"Python (myenv)",其中myenv是要添加的环境(内核)。


就我而言,使用Windows 10和conda 4.6.11,通过运行命令

1
2
3
conda install nb_conda

conda install -c conda-forge nb_conda_kernels

在我使用conda jupyter notebook从同一命令行打开Jupyter后,从环境激活的终端没有完成工作。

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

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

>
</p>
<div class=