首页 > 解决方案 > Jupyter notebook Python 内核 - FileNotFoundError: [Errno 2] No such file or directory python3

问题描述

问题

在 Jupyter notebook 中,如何解决找不到 Python 解释器的问题。

环境

问题

启动一个 jupyter notebook 并使用 Python 3 内核创建一个 notebook 并得到错误。nlp_in_tensorflow是一个已删除的 conda 环境。

Traceback (most recent call last):
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/tornado/web.py", line 1704, in _execute
    result = await result
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/tornado/gen.py", line 769, in run
    yielded = self.gen.throw(*exc_info)  # type: ignore
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/notebook/services/sessions/handlers.py", line 72, in post
    type=mtype))
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/tornado/gen.py", line 762, in run
    value = future.result()
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/tornado/gen.py", line 769, in run
    yielded = self.gen.throw(*exc_info)  # type: ignore
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/notebook/services/sessions/sessionmanager.py", line 88, in create_session
    kernel_id = yield self.start_kernel_for_session(session_id, path, name, type, kernel_name)
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/tornado/gen.py", line 762, in run
    value = future.result()
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/tornado/gen.py", line 769, in run
    yielded = self.gen.throw(*exc_info)  # type: ignore
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/notebook/services/sessions/sessionmanager.py", line 101, in start_kernel_for_session
    self.kernel_manager.start_kernel(path=kernel_path, kernel_name=kernel_name)
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/tornado/gen.py", line 762, in run
    value = future.result()
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/notebook/services/kernels/kernelmanager.py", line 176, in start_kernel
    kernel_id = await maybe_future(self.pinned_superclass.start_kernel(self, **kwargs))
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/jupyter_client/multikernelmanager.py", line 185, in start_kernel
    km.start_kernel(**kwargs)
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/jupyter_client/manager.py", line 313, in start_kernel
    self.kernel = self._launch_kernel(kernel_cmd, **kw)
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/jupyter_client/manager.py", line 220, in _launch_kernel
    return launch_kernel(kernel_cmd, **kw)
  File "/home/user/conda/envs/cs231n/lib/python3.7/site-packages/jupyter_client/launcher.py", line 131, in launch_kernel
    proc = Popen(cmd, **kwargs)
  File "/home/user/conda/envs/cs231n/lib/python3.7/subprocess.py", line 800, in __init__
    restore_signals, start_new_session)
  File "/home/user/conda/envs/cs231n/lib/python3.7/subprocess.py", line 1551, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/home/user/conda/envs/nlp_in_tensorflow/bin/python3': '/home/user/conda/envs/nlp_in_tensorflow/bin/python3'

标签: python-3.xjupyter-notebookanacondaconda

解决方案


原因

Python 3 内核的 kernel.json 文件指向已删除的环境。

$ jupyter kernelspec list
Available kernels:
  python3    /home/oonisim/.local/share/jupyter/kernels/python3

$ cat ~/.local/share/jupyter/kernels/python3/kernel.json 
{
 "argv": [
  "/home/user/conda/envs/nlp_in_tensorflow/bin/python3",   <----- Referring to the deleted environment
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3",
 "language": "python"
}

资源

多个 Python 环境,无论是基于 Anaconda 还是 Python 虚拟环境,通常都是报告问题的根源。在许多情况下,这些问题源于在一个环境中运行的笔记本服务器,而内核和/或其资源来自另一个环境

要检查的另一件事是将位于上述内核规范目录中的 kernel.json 文件通过运行 jupyter kernelspec list 标识。该文件将包含一个 argv 节,其中包含启动内核时要运行的实际命令。通常,在重新安装 python 环境时,以前的 kernel.json 会从旧的或不存在的位置引用 python 可执行文件。因此,在遇到内核启动问题时验证 argv 节以确保所有文件引用都存在并且是适当的总是一个好主意。

使固定

删除 ~/.local/share/jupyter/kernels/python3/kernel.json。

相关问题

Jupyter 设置为能够使用各种“内核”或代码执行引擎。这些可以是 Python 2、Python 3、R、Julia、Ruby……有许多可能的内核可供使用。但是为了实现这一点,Jupyter 需要知道在哪里寻找相关的可执行文件:也就是说,它需要知道 python 位于哪个路径。

这些路径在 jupyter 的内核规范中指定,用户可以根据自己的需要调整它们。例如,这是我系统上的内核列表:


推荐阅读