概述(tldr)
如果您想要'python3'内核始终运行来自启动环境的Python安装,请删除用户'python3'内核,该内核优先于当前环境中的任何内容:
jupyter kernelspec remove python3
完整解决方案
我将提供以下情况的另一种替代且更简单的解决方案:
- 你已经创建了一个conda环境
- 此环境已安装jupyter(它也会安装ipykernel)
- 当你运行命令
jupyter notebook
并通过单击“新建”下拉菜单中的'python3'来创建一个新的notebook时,该notebook会从base环境而不是当前环境中执行python。
- 你希望使用在任何环境内启动“python3”启动一个新笔记本,以执行该环境中的Python版本,而不是base环境的Python版本。
我将在解决方案的其余部分使用名称“test_env”。另外,请注意,“python3”是内核的名称。
目前得到最高投票的答案确实可行,但还有一个替代方案。 它说要执行以下操作:
python -m ipykernel install --user --name test_env --display-name "Python (test_env)"
这将使您有使用test_env环境的选项,无论从哪个环境启动jupyter笔记本
。但是,使用'python3'启动笔记本仍将使用基本环境中的Python安装。
可能发生的情况是存在一个用户python3内核。运行命令jupyter kernelspec list
以列出所有环境。例如,如果您使用的是mac,则会返回以下结果(我的用户名为Ted)。
python3 /Users/Ted/Library/Jupyter/kernels/python3
Jupyter在这里所做的是通过搜索三条不同的路径查找内核。 它从用户(User),到环境(Env),再到系统(System)。有关它为每个操作系统搜索的路径的更多详细信息,请参见此文档。
上面的两个内核都在用户路径(User path)中,这意味着无论从哪个环境启动Jupyter Notebook,它们都将可用。 这也意味着,如果还有另一个环境级别的'python3'内核,则永远无法访问它。
对我来说,更有意义的是从启动笔记本电脑的环境中选择'python3'内核应该执行该环境中的Python。
您可以查看您的操作系统的Env搜索路径,看看是否有另一个'python3'环境(请参阅上面的文档链接)。 对于我来说(在我的Mac上),我执行了以下命令:
ls /Users/Ted/anaconda3/envs/test_env/share/jupyter/kernels
我确实在那里列出了一个“python3”核心。
感谢这个GitHub问题评论(查看第一个响应),您可以使用以下命令删除用户“python3”环境:
jupyter kernelspec remove python3
现在当您运行jupyter kernelspec list
命令时,假设test_env仍然处于活动状态,您将会得到以下结果:
python3 /Users/Ted/anaconda3/envs/test_env/share/jupyter/kernels/python3
注意这个路径位于test_env目录中。如果你创建一个新的环境,安装jupyter,激活它并列出内核,你将得到另一个位于其环境路径下的'python3'内核。
用户'python3'内核优先于任何Env 'python3'内核。通过移除它,活动环境中的'python3'内核被暴露出来,并能够每次选择。这消除了手动创建内核的需要。从软件开发的角度来看,更希望将自己隔离在单一环境中。运行与主机环境不同的内核似乎并不自然。
同时,似乎默认情况下并不为所有人安装此用户'python3',因此并不是每个人都会遇到这个问题。
conda install ipykernel
看起来会在环境中安装jupyter
... 我有什么遗漏吗? - Drornb_conda
或手动设置内核时才有效,如问题中所建议的那样。否则,它实际上会使事情变得非常混乱。可执行文件jupyter
将指向环境内部的可执行文件,但系统的jupyter-notebook
将被启动(如果已安装),因此不会使用默认内核的环境。 - lumbric