将Conda环境与Jupyter Notebook链接

73

我正在尝试为使用Python进行科学研究设置良好的环境。为此,我安装了Jupyter和Miniconda。

然后,我想能够拥有不同的环境并将它们与Jupyter笔记本一起使用。因此,我使用conda创建了两个自定义环境:py27和py35。

> conda env list
# conda environments:
#
py27                     /Users/***/miniconda3/envs/py27
py35                     /Users/***/miniconda3/envs/py35
root                  *  /Users/***/miniconda3

在我的笔记本电脑上,我有两个内核python 2python 3。 在一个笔记本中,我使用python3内核得到以下结果:

> import sys
> print(sys.executable)
/Users/***/miniconda3/envs/py35/bin/python

并且这是使用Python2内核的情况:

> import sys
> print(sys.executable)
/usr/local/opt/python/bin/python2.7
  • 如何将sys.executable设置为Python2的miniconda环境?
  • 如何将conda环境与notebook内核绑定?
  • source activate py35jupyter notebook有关系吗?

我觉得我确实错过了什么。

谢谢大家。

--- 编辑

我有多个jupyter二进制文件:

> where jupyter
/usr/local/bin/jupyter
/usr/local/bin/jupyter
/Users/ThomasDehaeze/miniconda3/bin/jupyter

这里只有一个内核 /usr/local/share/jupyter/kernels/python2。 但在Jupyter内部,我有两个内核,python2python3。我该在哪里找到另一个内核?


我修改了/usr/local/share/jupyter/kernels/python2中的kernel.json

{
 "display_name": "Python 2",
 "language": "python",
 "argv": [
  "/Users/***/miniconda3/envs/py27/bin/python2.7",
  "-m",
  "ipykernel",
  "-f",
  "{connection_file}"
 ]
}

接着:

import sys
print(sys.executable)
/usr/local/opt/python/bin/python2.7

所以没有任何改变。


1
这可能会有所帮助,它允许您选择在ipython中运行内核的环境:https://groups.google.com/a/continuum.io/forum/m/#!topic/anaconda/RuSpZVPEio8 - Quantum_Oli
谢谢,我会研究一下。 - tdehaeze
请看我在这里的回答: https://dev59.com/Gl0a5IYBdhLWcg3wTHFt - 您可能想要使用--name参数的提示。 - cel
参见:https://dev59.com/_FMH5IYBdhLWcg3w1Dn0 - lumbric
7个回答

126
我建议您使用一个更简单和适当的解决方案来处理Anaconda;只需查看nb_conda_kernels package即可。
它允许您在Jupyter Notebook中“管理基于conda环境的内核”。
自Anaconda版本4.1.0以来,应该已经包含了它,否则只需使用。
conda install nb_conda

现在您应该能够直接从笔记本界面管理所有内容。
请注意,仅安装了Jupyter内核的环境才能工作(对于Python来说,是`ipykernel`包)。这是从`nb_conda_kernels` GitHub页面引用的。

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

19
这个软件包很好用!你只需要在激活环境时安装它。该环境会立即显示在笔记本的新菜单选择中。因此,您需要对想要添加到列表中的每个环境执行此操作。 - omasoud
1
安装nb_conda的缺点是会使conda环境杂乱无序。有什么解决方法吗? - Quickbeam2k1
1
@Quickbeam2k1,你只需要将它安装到你正在运行Jupyter笔记本的环境中。这样可以让你将Jupyter安装到根环境中,并在各种其他环境中运行笔记本,而无需在每个环境中都安装Jupyter。 - shadowtalker
他们改了什么吗?上次我尝试过,由于nb_conda内核与Jupyter的依赖关系,这是不可能的。 - Quickbeam2k1
6
今天(2018年2月1日)我尝试安装了nb_conda在根环境中,所有的环境都出现在Jupyter笔记本文件浏览器的内核列表中,无需在其他环境中安装nb_conda_kernels。 - Leo
显示剩余8条评论

33
假设您的 conda-env 名称为 cenv,那么只需简单执行以下操作:
    $ conda activate cenv
    (cenv)$ conda install ipykernel
    (cenv)$ ipython kernel install --user --name=<any_name_for_kernel>
    (cenv($ conda deactivate

如果您重新启动jupyter笔记本/实验室,您将能够看到可用的新内核。

PS:如果您正在使用virtualenv等,上述步骤仍然适用。


2
这是我一直使用的方法。但是,当我在conda环境中安装openjdk时,它无法正常工作。通常在激活环境时会设置JAVA_HOME,但在安装为ipython内核时却没有发生。对于这种情况有什么想法吗? - WilliamEllisWebb
是否建议为ipykernel本身创建一个独立的conda环境,并从那里安装所有内核,而不是一个环境对应一个ipykernel? - VimNing

10

我不确定还有什么其他方法可以帮助,但对我来说至关重要的是在根conda环境中安装nb_conda_kernels。 尝试在特定的conda环境中安装它并没有使Jupyter Notebook能够使用除默认环境之外的其他conda环境。

conda install -n root nb_conda_kernels

jupyter notebook

1
是的。我也不得不这样做,尽管这有点违反直觉,因为 nb_conda 只应该放在你想要作为内核的 envs 中。 - kett

6
我找到了解决方法。内核设置位于此处:~/Library/Jupyter/kernels/
然后,我修改了kernel.json文件,并将正确的路径设置为Python。
现在它可以正常工作了。

哎呀,手动修改kernel.json文件只是暂时解决了你的问题(就像用胶带修补一样)。当你创建下一个环境时,你会遇到同样的问题。我不建议将其视为“解决方案”。 - undefined

1
这对我有用:
source activate {environment_name}
python -m ipykernel install --user --name={environment_name};

如果未安装ipykernel,请使用以下命令:

conda install -c anaconda ipykernel

0

如果您使用来自Docker镜像(例如jupyter/scipy-notebook)的Jupyter笔记本,则可以将挂载的conda环境用作内核。

  1. 使用以下命令挂载conda环境:

docker run -d -v "/opt/anaconda/envs:/opt/conda/envs" -p 10000:8888 jupyter/scipy-notebook

  1. 从Jupyter终端在基础环境中安装nb_conda_kernels:

(base) jovyan@NUM:~$ conda install nb_conda_kernels

  1. 激活应该使用的已挂载卷的环境(必须先创建):

(base) jovyan@NUM:~$ conda activate useEnv

  1. 在useEnv中安装ipykernel:

(useEnv) jovyan@NUM:~$ conda install -c anaconda ipykernel

  1. 安装内核

(useEnv) jovyan@NUM:~$ python -m ipykernel install --user --name=useEnv

然后您可以在jupyter笔记本中选择新安装的内核useEnv

注意:对于我来说,不是很清楚从5agado的接受答案中需要在哪里安装软件包nb_conda_kernelsipykernel,以及如何在docker化的jupyter笔记本终端内部使用它。


0
我成功的方法是:创建虚拟环境,安装ipykernel,将虚拟环境注册到jupyter内核中并加载jupyter笔记本。
$ conda create -n testEnv python=3.6
$ conda activate testEnv
(testEnv)$ conda install ipykernel
(testEnv)$ ipython kernel install --user --name=testEnv
(testEnv)$ jupyter notebook

接下来,在Jupyter Notebook中,您应该能够在其他内核列表中找到已创建的环境。


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