当前位置: 首页 > 知识库问答 >
问题:

如何在conda环境中使用Jupyter笔记本电脑?

申颖逸
2023-03-14

通常在终端中运行jupyter notebookjupyter notebookipython notebook,在本地启动jupyter notebook Web服务器(并在浏览器中打开URL)。在使用conda和conda环境时,运行Jupyter笔记本的最佳方式是什么,它允许导入安装在conda环境中的Python模块?

看起来,这并不是很直截了当,许多用户也有类似的问题。

最常见的错误消息似乎是:在conda环境my env中安装程序包XYZ后,可以在my env中启动的python控制台中运行import XYZ,但在Jupyter笔记本中运行相同的代码将导致导入错误。

这个问题已经问过很多次了,但是没有一个好的地方可以回答,大多数问

共有1个答案

拓拔俊德
2023-03-14

*免责声明:仅在Ubuntu和Windows中测试(请参阅对此答案的评论),如果在使用其他操作系统时发生更改,请发表评论。

Jupyter在称为内核的单独进程中运行用户代码。内核可以是不同的Python安装(在不同的conda环境或virtualenv或Python 2而不是Python 3中),甚至可以是不同语言的解释器(例如Julia或R)。内核通过指定解释器、名称和一些其他参数进行配置(参见Jupyter文档),配置可以存储在系统范围内,用于活动环境(或VirtualEnvironment)或每个用户。如果使用nb\u conda\u内核,除了静态配置的内核外,Jupyter笔记本电脑中还将为每个安装了ipykernel的conda环境提供单独的内核。

简言之,有三个选项可以选择如何使用conda环境和Jupyter:

做一些类似于:

conda create -n my-conda-env         # creates new virtual env
conda activate my-conda-env          # activate environment in terminal
conda install jupyter                # install jupyter + notebook
jupyter notebook                     # start server + kernel inside my-conda-env

Jupyter将完全安装在conda环境中。不同版本的Jupyter可用于不同的conda环境,但此选项可能有点过分。在环境中包含内核就足够了,它是运行代码的组件包装Python。Jupyter笔记本的其余部分可以被视为编辑器或查看器,不必为每个环境单独安装,也不必将其包含在每个环境中。yml文件。因此,下面两个选项中的一个可能更可取,但这一个是最简单的,而且肯定很好。

做一些类似于:

conda create -n my-conda-env                               # creates new virtual env
conda activate my-conda-env                                # activate environment in terminal
conda install ipykernel                                    # install Python kernel in new conda env
ipython kernel install --user --name=my-conda-env-kernel   # configure Jupyter to use Python kernel

然后从系统安装或其他conda环境运行jupyter:

conda deactivate          # this step can be omitted by using a different terminal window than before
conda install jupyter     # optional, might be installed already in system e.g. by 'apt install jupyter' on debian-based systems
jupyter notebook          # run jupyter from system

内核的名称和conda环境是相互独立的,但是使用类似的名称可能是有意义的。

只有Python内核将在conda环境中运行,系统中的Jupyter或不同的conda环境将被使用——它不会安装在conda环境中。通过调用ipython内核安装,jupyter被配置为使用conda环境作为内核,有关更多信息,请参阅jupyter留档和IPython留档。在大多数Linux安装中,这个配置是一个*. json文件,位于~/. local/share/jupyter/kernels/my-conda-env-core/kernel.json

{
 "argv": [
  "/opt/miniconda3/envs/my-conda-env/bin/python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "my-conda-env-kernel",
 "language": "python"
}

安装包nb_conda_内核时,包含conda包ipykernel的每个conda环境或不同的内核(R、Julia,…)都会自动提供一个单独的内核。

conda activate my-conda-env    # this is the environment for your project and code
conda install ipykernel
conda deactivate

conda activate base            # could be also some other environment
conda install nb_conda_kernels
jupyter notebook

您应该能够选择内核Python[conda env:my conda env]。请注意,nb\u conda\u内核似乎只能通过conda使用,而不能通过pip或其他包管理器(如apt)使用。

使用Linux /Mac命令行上的命令哪个将告诉您使用了哪个jupyter,如果您正在使用选项1(在conda环境中运行Jupyter),它应该是conda环境中的可执行文件:

$ which jupyter
/opt/miniconda3/envs/my-conda-env/bin/jupyter
$ which jupyter-notebook   # this might be different than 'which jupyter'! (see below)
/opt/miniconda3/envs/my-conda-env/bin/jupyter-notebook

在笔记本中,您应该看到Python使用conda环境中的Python路径:

[1] !which python
/opt/miniconda3/envs/my-conda-env/bin/python
[2] import sys; sys.executable
'/opt/miniconda3/envs/my-conda-env/bin/python'
['/home/my_user',
 '/opt/miniconda3/envs/my-conda-env/lib/python37.zip',
 '/opt/miniconda3/envs/my-conda-env/lib/python3.7',
 '/opt/miniconda3/envs/my-conda-env/lib/python3.7/lib-dynload',
 '',
 '/opt/miniconda3/envs/my-conda-env/lib/python3.7/site-packages',
 '/opt/miniconda3/envs/my-conda-env/lib/python3.7/site-packages/IPython/extensions',
 '/home/my_user/.ipython']

jupyter提供命令jupyter-疑难解答或在Jupyter笔记本中:

!jupyter-troubleshoot

这将打印大量有用的信息,包括上面提到的输出以及已安装的库和其他。在就Jupyter安装问题寻求帮助时,最好在bug报告或问题中提供这些信息。

要列出运行的所有配置的Jupyter内核:

jupyter kernelspec list

注意:症状并非此处描述的问题所独有。

症状:Jupyter笔记本中安装在conda环境中的模块出错(但未安装系统范围),但在Python终端中导入时没有错误

说明:您试图在您的conda环境中运行jupyter笔记本(选项1,见上文),该conda环境没有内核配置(这将是选项2),nb_conda_kernels没有安装(选项3),但jupyter笔记本没有(完全))安装在conda环境中,即使jupyter可能会让您相信它是。

在GNU/Linux中,您可以键入which jupyter来检查jupyter的哪个可执行文件正在运行。

这意味着系统的Jupyter被使用,可能是因为Jupyter没有安装:

(my-conda-env) $ which jupyter-notebook
/usr/bin/jupyter

如果路径指向conda环境中的文件,Jupyter将在Jupyter内部运行:

(my-conda-env) $ which jupyter-notebook
/opt/miniconda3/envs/my-conda-env/bin/jupyter-notebook

请注意,当安装conda软件包ipykernel时,会提供可执行的jupyter,但没有可执行的jupyter笔记本。这意味着哪个jupyter返回到conda环境的路径,但jupyter笔记本将启动系统的jupyter nootebook(另请参见此处):

 $ conda create -n my-conda-env
 $ conda activate my-conda-env
 $ conda install ipykernel
 $ which jupyter            # this looks good, but is misleading!
 /opt/miniconda3/envs/my-conda-env/bin/jupyter
 $ which jupyter-notebook   # jupyter simply runs jupyter-notebook from system...
 /usr/bin/jupyter-notebook

发生这种情况是因为jupyter笔记本搜索jupyter笔记本,找到/usr/bin/jupyter笔记本并调用它启动新的Python进程。/usr/bin/jupyter-笔记本中的sheang是#!/usr/bin/python3而不是动态的!/usr/bin/envpython。因此Python设法突破了conda环境。我猜jupyter可以调用python /usr/bin/jupyter-notebook来推翻sheang,但是混合系统的bin文件和环境的python路径无论如何都不能很好地工作。

解决方案:在conda环境中安装jupyter笔记本电脑:

 conda activate my-conda-env
 conda install jupyter
 jupyter notebook

注意:症状并非此处描述的问题所独有。

症状:Jupyter笔记本中安装在conda环境中的模块出错(但未安装系统范围),但在Python终端中导入时没有错误

说明:系统通常提供一个名为python3(显示名称“python3”)的内核,该内核配置为使用/usr/bin/python3,请参见例如/usr/share/jupyter/kernels/python3/kernel。json。这通常由conda环境中的内核覆盖,该内核指向python二进制/opt/miniconda3/envs/my conda env/bin/python环境。两者都是由包ipykernel生成的(请参见此处和此处)。

~/中的用户内核规范。local/share/jupyter/kernels/python3/kernel。json可能会覆盖系统范围和环境内核。如果环境内核丢失或用户内核指向环境之外的python安装,选项1(在环境中安装jupyter)将失败。

有关此问题和变体的出现和讨论,请参见此处、此处、此处和此处、此处和此处。

解决方案:使用jupyter kernelspec list列出活动内核位置。

$ conda activate my-conda-env
$ jupyter kernelspec list
Available kernels:
  python3 /opt/miniconda3/envs/my-conda-env/share/jupyter/kernels/python3

如果环境中的内核丢失,您可以尝试在激活的环境中使用ipython内核安装--sys-prefix手动创建它,但是最好检查您的安装,因为conda安装ipycore应该创建环境(也许尝试重新打包环境并重新安装所有包?)。

如果用户内核规范阻止了环境内核规范,您可以删除它,或者使用相对的python路径,该路径将使用$path来确定要使用哪个python。所以像这样的事情,应该是完全好的:

$ cat ~/.local/share/jupyter/kernels/python3/kernel.json
{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3",
 "language": "python"
}

症状:Jupyter笔记本电脑和Python终端中安装在conda环境(但未安装系统范围)中的模块的ImportError

说明:每个终端都有一组环境变量,这些变量在终端关闭时丢失。为了使用conda环境,需要设置某些环境变量,这是通过使用conda activate my conda env激活它来完成的。如果您试图从conda环境(选项1)内部运行Jupyter笔记本,但在运行之前未激活conda环境,则它可能会运行系统的Jupyter。

解决方案:在运行Jupyter之前激活conda环境。

 conda activate my-conda-env
 jupyter notebook

症状:奇怪的事情发生。可能出现与上述类似的症状,例如严重恐怖

说明:如果您试图使用选项2,即通过使用内核的显式配置从系统运行Jupyter,并在conda环境中运行Jupyter内核,但它的行为与您预期的不同,则配置可能会以某种方式损坏。

解决方案:在~/. local/share/jupyter/kernels/my-kern-name/kernel.json中检查配置,手动修复错误,或者删除整个目录,并使用上面为选项2提供的命令重新创建它。如果找不到内核配置,请运行jupyter kernelspec list。

症状:由于Jupyter内核的Python版本错误或Python 2/3的其他问题而导致导入恐怖

说明:内核配置可能会产生各种令人困惑和误导的效果。例如,默认的Python 3内核配置将允许我启动运行在Python 2上的Jupyter笔记本:

conda create -n my-conda-env
conda activate my-conda-env
conda install python=2
conda install jupyter
jupyter notebook

默认的Python 3内核:

$ cat ~/.local/share/jupyter/kernels/python3/kernel.json
{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3",
 "language": "python"
}

使用Python3内核创建新的Jupyter笔记本后,即使Jupyter显示“Python3”,也将使用conda环境中的Python2。

解决方案:不要使用Python 2;-)

 类似资料:
  • 问题内容: 典型地,一个运行或或在终端局部地启动一个Jupyter笔记本网络服务器(和打开的浏览器中的URL)。使用conda 和conda环境时, 最常见的错误消息似乎是:在conda环境中安装XYZ软件包后, 可以在其中启动的python控制台中运行,但是在 Jupyter笔记本中 运行相同的代码 将导致ImportError 。 这个问题已经被问过很多次了,但是没有一个很好的答案,大多数Q&

  • 我在Windows 10上运行Anaconda,并使用Jupyter Notebook进行机器学习项目。 我最近开始意识到Conda中的虚拟环境。 我使用以下命令在conda中创建了一个虚拟环境 激活环境 ipykernel中安装的环境(不确定使用的术语是否正确) 现在环境是可见的jupyter笔记本,但当我启动它我得到

  • 我正试图为用python做一些科学工作设置一个良好的环境。为此,我安装了Jupyter 然后我希望能够拥有不同的环境,并将它们与Jupyter笔记本一起使用。所以我用conda创建了两个自定义环境:py27和py35。 然后在我的笔记本上我有两个内核和。在一个笔记本里,我得到了下面的python3内核: 这与python2内核有关: 我如何设置为python2的minicda env? 如何将co

  • 问题内容: 我正在使用Jupyter Lab,无法添加环境。这个想法是从我的基本环境启动Jupyter Lab,然后能够选择我的其他conda env作为内核。 我安装了应该可以做到这一点的软件包,但是它并没有按照我的意愿工作。确实,假设我创建了一个新的Conda Environment,然后从基础上启动了jupyter Lab,我无法将新环境视为可用的内核。 我找到了一个“修复程序”,它每次都可

  • 我为不同的Python项目使用不同的conda环境,并且习惯于在Jupyter笔记本中愉快地使用nb_conda_kernels来访问这些环境的内核。它们将在“新”下拉列表中提供,名称类似于“Python[conda env: project]。经过一些更新后,这些内核都没有出现在Jupyter中,当我试图打开一个使用这些内核之一的笔记本时,我得到内核未找到-找不到匹配Python[conda e

  • 问题内容: 我正在尝试为使用python做一些科学的事情设置良好的环境。为此,我安装了Jupyter和miniconda。 然后,我希望能够拥有不同的环境,并将其与Jupyter笔记本电脑一起使用。所以我用conda创建了两个自定义环境:py27和py35。 然后在笔记本上我有两个内核和。在笔记本中,我得到了python3内核的以下信息: 而这与python2内核: 如何为python2设置min