如何在 Jupyter Notebook 中选择你的 conda 环境

Posted

技术标签:

【中文标题】如何在 Jupyter Notebook 中选择你的 conda 环境【英文标题】:How to choose your conda environment in Jupyter Notebook 【发布时间】:2019-03-25 14:35:23 【问题描述】:

我使用 Python 3.7(根环境)安装了 Anaconda 5.3。 之后我使用 Python 3.6 创建了一个新环境(py36)

我使用activate py36 激活了新环境conda env list 表明该环境处于活动状态。

但是当我启动 Jupyter Notebook(从 Anaconda 提示符 jupyter notebook)时,它似乎使用的是根环境,而不是激活的环境。

如何在新的创建环境 (py36) 中使用 Jupyter Notebook?

【问题讨论】:

我可能已经找到了解决方案。在“主页”菜单的 Anaconda Navigator 中,我在下拉菜单“应用程序打开”中选择了“py36”环境。它可以选择在所选环境中从那里安装 Jupyter Notebook,然后再启动它。在激活新环境后也可以从命令行启动它。我希望有更有效的方法,而不是为每个(新)环境再次安装 Jupyter Notebook。 阅读docs.continuum.io/anaconda/user-guide/tasks/… 的文档,尤其是docs.continuum.io/anaconda/user-guide/tasks/… 【参考方案1】:

我设法在类似问题中找到了解决方案。问题是 IPython 不是 virtualenv-aware,因此一种解决方法(我发现最舒服的一种)是指定自定义 IPython 内核以避免为每个 virtualenv(或 anaconda 环境,在您的情况下)安装一个 Jupyter Notebook .

Jupyter 依赖于存储在您的操作系统某处的一些“内核”(定义在何处查找 python 二进制文件)。这些文件是这样的:


 "display_name": "NameOfTheKernel", 
 "language": "python", 
 "argv": [
  "/usr/bin/python", 
  "-m", 
  "ipykernel_launcher", 
  "-f", 
  "connection_file"
 ]

/usr/bin/python 是要执行的 python 二进制文件的路径。但是,由于这些内核是由 Jupyter 在您计算机中的某个位置定义的,因此当您安装其他一些环境(anaconda 或 virtualenv 就是这种情况)时,它们不会更新。我发现最简单的方法是为您使用的每个环境定义一个自定义内核。此外,这样做可以消除每次您想使用环境时都激活环境的需要,因为它是直接加载的。

这个想法是定义一个自定义内核,以便 Jupyter 可以“看到”您使用 anaconda 创建的环境。为此,请在 bash 中执行以下行:

ipython kernel install --user --name=NameOfTheKernel

“NameOfTheKernel”实际上并没有那么重要。如果您没有 ipython 软件包,请使用 pip、anaconda、sudo apt install 或其他方式安装它。

此行将定义一个自定义内核,jupyter 将检测到该内核。为了便于说明,在 Ubuntu 中,这将存储在文件夹 /home/USERNAME/.local/share/jupyter 中,具有以下数据结构:

/home/USERNAME/.local/share/jupyter/kernels/
└── nameofthekernel
    ├── kernel.json
    ├── logo-32x32.png
    └── logo-64x64.png

安装内核后,您必须:

1) 了解 anaconda 安装环境的位置。一个简单的方法是在 anaconda 中激活您的环境,然后在终端中编写“which python”。这将显示二进制文件的完整路径。

2) 在刚刚创建的 jupyter 内核中写入该路径。例如。使用 pluma:

pluma /home/USERNAME/.local/share/jupyter/kernels/nameofthekernel/kernel.json

然后,您将安装的 python 二进制文件的路径替换为 /usr/bin/python 所在的 anaconda。

此后,如果 Jupyter 正在运行,请重新启动它。这样,下次打开 Jupyter 时,您可以更改内核(在笔记本中,上部的选项卡之一),您将使用您的环境以及与该环境一起安装的所有内容。

[TL;DR] 我用 pip 做到了,但是 anaconda 的步骤或多或少是相同的。步骤是:

#CREATE THE IPYTHON KERNELS
ipython kernel install --user --name=NameOfKernel
#IF PYTHON2 - MODIFY THE KERNELS TO USE THE ANACONDA BINARIES
sed -i -e "s|/usr/bin/python3|/home/$USER/anaconda/bin/python27|g" /home/$USER/.local/share/jupyter/kernels/nameofkernel/kernel.json
#IF PYTHON3 - MODIFY THE KERNELS TO USE THE ANACONDA BINARIES
sed -i -e "s|/usr/bin/python3|/home/$USER/anaconda/bin/python36|g" /home/$USER/.local/share/jupyter/kernels/nameofkernel/kernel.json

或者,如果您正在使用环境:

#CREATE THE IPYTHON KERNELS
ipython kernel install --user --name=NameOfKernel
#IF PYTHON2 - MODIFY THE KERNELS TO USE THE ANACONDA BINARIES
sed -i -e "s|/usr/bin/python3|/home/$USER/anaconda/envs/nameofenvironment/python27|g" /home/$USER/.local/share/jupyter/kernels/nameofkernel/kernel.json
#IF PYTHON3 - MODIFY THE KERNELS TO USE THE ANACONDA BINARIES
sed -i -e "s|/usr/bin/python3|/home/$USER/anaconda/envs/nameofenvironment/python36|g" /home/$USER/.local/share/jupyter/kernels/nameofkernel/kernel.json

注意:我没有安装 CONDA 来测试解决方案,因此导致实际 Python 二进制文件的路径可能会改变。但是,过程是相同的。

【讨论】:

【参考方案2】:

正如@Ista 提到的,该文档提供了一个使用笔记本扩展的简单解决方案。

conda install nb_conda

安装后,您可以在 Jupyter Notebook 中从 Jupyter Notebook 的“内核”菜单中选择“更改内核”。

【讨论】:

以上是关于如何在 Jupyter Notebook 中选择你的 conda 环境的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的jupyter notebook改不了工作路径?

Jupyter Notebook中如何做上标和下标?

如何安装ipython notebook

怎么打开jupyter notebook?

Jupyter Notebook——如何显示目录的导航栏(安装 Jupyter Notebook extension)

运行jupyter notebook出现这种情况的原因如何解决