出现问题时该怎么办#

首先,请查看下面列出的常见问题。如果您能通过这些说明解决问题,会比寻求帮助更快。

检查您是否已将所有看起来相关的软件包更新到最新版本。不幸的是,要弄清楚哪些软件包是相关的并不总是那么容易,但如果存在一个已经被修复的 bug,那么升级并继续您想做的事情会很简单。

Jupyter 无法启动#

  • 安装它了吗? ;-)

  • 如果您使用菜单快捷方式或 Anaconda 启动器来启动它,请尝试打开一个终端或命令提示符,并运行命令 jupyter notebook

  • 如果找不到 jupyter,您可能需要配置您的 PATH 环境变量。如果您不知道这是什么意思,也不想去了解,只需使用默认设置(重新)安装 Anaconda,它应该会正确设置 PATH。

  • 如果 Jupyter 报错说找不到 notebook,请使用 pip 或 conda 检查 notebook 软件包是否已安装。

  • 尝试运行 jupyter-notebook(带连字符)。这通常应该与 jupyter notebook(带空格)相同,但如果有任何区别,带连字符的版本是“真正”的启动器,而另一个则是它的包装器。

Jupyter 无法加载或在浏览器中无法工作#

  • 尝试换一个浏览器(例如,如果您通常使用 Firefox,请尝试使用 Chrome)。这有助于确定问题所在。

  • 尝试禁用您安装的任何浏览器扩展和/或任何 Jupyter 扩展。

  • 一些网络安全软件可能会干扰 Jupyter。如果您有安全软件,请尝试暂时关闭它,并在其设置中寻找更长期的解决方案。

  • 在地址栏中,尝试在 localhost127.0.0.1 之间切换。它们应该是一样的,但在某些情况下会有所不同。

Jupyter 无法启动内核#

名为*内核规范*(kernel specs)的文件告诉 Jupyter 如何启动不同类型的内核。要查看这些文件在您系统上的位置,请运行 jupyter kernelspec list

$ jupyter kernelspec list
Available kernels:
  python3      /home/takluyver/.local/lib/python3.6/site-packages/ipykernel/resources
  bash         /home/takluyver/.local/share/jupyter/kernels/bash
  ir           /home/takluyver/.local/share/jupyter/kernels/ir

Python 内核有一个特殊的备用方案:如果它找不到真正的内核规范,但可以导入 ipykernel 包,它会提供一个内核,该内核将与 notebook 服务器在同一个 Python 环境中运行。像上面例子中以 ipykernel/resources 结尾的路径就是这个默认内核。默认内核通常能满足您的需求,所以如果 python3 内核规范指向其他地方并且您无法启动 Python 内核,请尝试删除或重命名该内核规范文件夹以启用默认内核。

如果您的问题出在其他内核上,而不是我们维护的 Python 内核,您可能需要寻找有关该内核的支持。

Python 环境#

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

  • 代码单元格中的 import 语句产生 ImportErrorModuleNotFound 异常。

  • 尝试执行单元格时没有任何反应,表现为常规的内核启动失败。

在这些情况下,请仔细检查您的环境结构,并确保您的 notebook 代码所需的所有包都已安装在正确的环境中。如果您需要在不同于 Notebook 服务器的环境中运行内核,请查阅 IPython 关于使用来自不同环境的内核的文档,这是推荐的方法。Anaconda 的 nb_conda_kernels 包在这些场景下也可能是一个选择。

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

Windows 系统#

虽然 Jupyter Notebook 主要在各种 Unix 操作系统上开发,但它也支持 Microsoft Windows——这引入了其自身的一系列常见问题,尤其是在安全、进程管理和底层库方面。

pywin32 问题#

与 Windows 原语交互的主要软件包是 pywin32

  • 围绕创建内核通信文件的问题使用了 jupyter_coresecure_write() 函数。此函数确保创建的文件只有文件所有者有权访问。如果像 pywin32 这样的库没有正确安装,在需要使用原生 Windows 库时可能会出现问题。

    以下是此类追溯信息的一部分

    File "c:\users\jovyan\python\myenv.venv\lib\site-packages\jupyter_core\paths.py", line 424, in secure_write
    win32_restrict_file_to_user(fname)
    File "c:\users\jovyan\python\myenv.venv\lib\site-packages\jupyter_core\paths.py", line 359, in win32_restrict_file_to_user
    import win32api
    ImportError: DLL load failed: The specified module could not be found.
    
  • 如前所述,pywin32 的安装在 Windows 配置上可能会有问题。当出现此类问题时,您可能需要重新检查环境的设置方式。请特别注意您运行的是 32 位还是 64 位版本的 Windows,并确保为该环境安装了相应的软件包。

    以下是此类追溯信息的一部分

    File "C:\Users\jovyan\AppData\Roaming\Python\Python37\site-packages\jupyter_core\paths.py", line 435, in secure_write
    win32_restrict_file_to_user(fname)
    File "C:\Users\jovyan\AppData\Roaming\Python\Python37\site-packages\jupyter_core\paths.py", line 361, in win32_restrict_file_to_user
    import win32api
    ImportError: DLL load failed: %1 is not a valid Win32 application
    

解决 pywin32 问题#

在这种情况下,您的 pywin32 模块可能没有正确安装,应尝试以下操作

pip install --upgrade pywin32

conda install --force-reinstall pywin32

然后

python.exe Scripts/pywin32_postinstall.py -install

其中 Scripts 位于当前活动 Python 的安装位置。

  • 另一个 Windows 环境特有的常见故障是各种 python 命令的位置。在 *nix 系统上,这些命令通常位于活动 Python 环境的 bin 目录中。然而,在 Windows 上,它们往往位于 Scripts 文件夹中——该文件夹与 bin 是同级目录。因此,当遇到内核启动问题时,请再次检查 argv 节并验证它是否指向一个有效的文件。您可能会发现它指向了 bin 目录,而正确的应是 Scripts,或者引用的文件没有包含其 .exe 扩展名——这通常会导致 FileNotFoundError 异常。

一小时前还好好的#

Jupyter 技术栈非常复杂,这是理所当然的,因为它涉及很多东西。有时您可能会发现系统运行得非常好,然后突然之间,由于 import 失败,您无法通过某个单元格。在这种情况下,最好问问自己是否在您的 notebook 开发区域添加了任何新的 python 文件。

通过仔细分析 notebook 错误或 Notebook 服务器命令窗口中产生的追溯信息,通常可以明显看出这些问题。在这些情况下,您通常会发现 Python 内核代码(来自 IPythonipykernel)正在执行*它自己的*导入,并注意到追溯信息中包含了您 Notebook 开发区的一个文件,随后是 AttributeError

File "C:\Users\jovyan\anaconda3\lib\site-packages\ipykernel\connect.py", line 13, in
from IPython.core.profiledir import ProfileDir
File "C:\Users\jovyan\anaconda3\lib\site-packages\IPython_init.py", line 55, in
from .core.application import Application
...
File "C:\Users\jovyan\anaconda3\lib\site-packages\ipython_genutils\path.py", line 13, in
import random
File "C:\Users\jovyan\Desktop\Notebooks\random.py", line 4, in
rand_set = random.sample(english_words_lower_set, 12)
AttributeError: module 'random' has no attribute 'sample'

发生的情况是,您命名的一个文件与内核软件使用的某个已安装软件包冲突,现在引入了一个冲突,阻止了内核的启动。

解决方法:您需要重命名您的文件。一个最佳实践是为您的文件添加前缀或*命名空间*,以避免与任何 python 包冲突。

寻求帮助#

与任何问题一样,尝试搜索一下是否已经有人找到了答案。如果您找不到现有答案,可以在以下地方提问:

收集信息#

如果您发现您的问题值得在 notebook 中提交一个 issue,请不要忘记提供以下细节:

  • 您看到了什么错误信息(在您的 notebook 中,更重要的是,在 Notebook 服务器的命令窗口中)?

  • 您使用的是什么平台?

  • 您是如何安装 Jupyter 的?

  • 您已经尝试了哪些方法?

jupyter troubleshoot 命令会收集大量关于您安装的信息,这也可能很有用。

在提供文本信息时,如果您能将内容*复制粘贴*到 issue 中,而不是提供截图,那将最有帮助。这使得其他人能够选择部分内容,以便他们可以更有效地搜索并尝试提供帮助。

请记住,帮助您不是任何人的工作。我们希望 Jupyter 能为您所用,但我们不能总是为每个人提供单独的帮助。