总结(tldr)
如果你想让'python3'内核总是在它启动的环境中运行Python安装,删除User 'python3'内核,它优先于当前环境:
jupyter kernelspec remove python3
完整的解决方案
我将针对以下情况发布一个替代和更简单的解决方案:
您已经创建了一个conda环境
这个环境已经安装了jupyter(它也安装了ipykernel)
当您运行命令jupyter notebook并通过单击“new”下拉菜单中的“python3”创建一个新notebook时,该notebook将从基本环境而不是当前环境执行python。
您可能希望在任何环境中启动带有“python3”的新笔记本时,都会从该环境执行Python版本,而不是从基础环境执行
在解决方案的其余部分中,我将使用“test_env”作为环境的名称。另外,注意'python3'是内核的名称。
目前票数最高的答案确实有效,但还有另一种选择。它说要做以下事情:
python -m ipykernel install --user --name test_env --display-name "Python (test_env)"
这将为您提供使用test_env环境的选项,而不管您从哪个环境启动jupyter notebook。但是,使用'python3'启动笔记本电脑仍将使用基本环境中的Python安装。
可能发生的情况是存在一个用户python3内核。运行命令jupyter kernelspec list列出所有环境。例如,如果你有一个mac,你将返回以下(我的用户名是Ted)。
python3 /Users/Ted/Library/Jupyter/kernels/python3
木星在这里所做的是在三条不同的路径上寻找内核。它从用户,到环境,到系统。有关它搜索每个操作系统的路径的详细信息,请参阅本文档。
上面的两个内核都在User路径中,这意味着无论您从哪个环境启动jupyter笔记本,它们都是可用的。这也意味着如果在环境级别上存在另一个“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'内核。
User 'python3'内核优先于任何Env 'python3'内核。通过移除它,活动环境“python3”内核就被公开了,并且每次都可以被选择。这消除了手动创建内核的需要。在软件开发方面,它也更有意义,因为人们希望将自己隔离到一个单一的环境中。运行与宿主环境不同的内核似乎不太自然。
默认情况下,似乎并不是每个人都安装了这个User 'python3',所以并不是每个人都遇到了这个问题。