通常在终端中运行jupyter notebook
或jupyter notebook
或ipython notebook
,在本地启动jupyter notebook Web服务器(并在浏览器中打开URL)。在使用conda和conda环境时,运行Jupyter笔记本的最佳方式是什么,它允许导入安装在conda环境中的Python模块?
看起来,这并不是很直截了当,许多用户也有类似的问题。
最常见的错误消息似乎是:在conda环境my env
中安装程序包XYZ后,可以在my env
中启动的python控制台中运行import XYZ
,但在Jupyter笔记本中运行相同的代码将导致导入错误。
这个问题已经问过很多次了,但是没有一个好的地方可以回答,大多数问
*免责声明:仅在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