当事情出错时该怎么办#

首先,查看下面列出的常见问题。如果你能从这些笔记中找到答案,会比寻求帮助更快。

检查你是否拥有任何看起来相关的软件包的最新版本。不幸的是,并不总是很容易确定哪些软件包是相关的,但如果存在已经修复的错误,升级并继续你想要做的事情很容易。

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 无法启动内核#

名为内核规范的文件告诉 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 包,它将提供一个在与笔记本服务器相同的 Python 环境中运行的内核。以 ipykernel/resources 结尾的路径,如上面的示例所示,就是这个默认内核。默认情况下,它通常可以满足您的需求,因此,如果 python3 内核规范指向其他位置,并且您无法启动 Python 内核,请尝试删除或重命名该内核规范文件夹以暴露默认内核。

如果您的问题与另一个内核有关,而不是我们维护的 Python 内核,您可能需要寻求有关该内核的支持。

Python 环境#

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

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

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

在这些情况下,仔细查看您的环境结构,并确保笔记本代码所需的所有包都安装在正确的环境中。如果您需要从与笔记本服务器不同的环境运行内核,请查看 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 失败。在这种情况下,最好问问自己是否在笔记本开发区域添加了任何新的 Python 文件。

这些问题通常可以通过仔细分析笔记本错误或笔记本服务器命令窗口中产生的回溯来发现。在这些情况下,您通常会发现 Python 内核代码(来自 IPythonipykernel)执行导入,并注意到来自笔记本开发错误的文件包含在该回溯中,后面跟着一个 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 中打开一个问题,请不要忘记提供以下详细信息

  • 您看到了哪些错误消息(在您的笔记本中,更重要的是,在笔记本服务器的命令窗口中)?

  • 您在哪个平台上?

  • 您是如何安装 Jupyter 的?

  • 您已经尝试过什么?

The jupyter troubleshoot 命令收集有关您的安装的许多信息,这也很有用。

在提供文本信息时,如果您能将内容抓取到问题中,而不是提供屏幕截图,这将非常有帮助。这使其他人能够选择该内容的部分,以便他们能够更有效地搜索并尝试提供帮助。

请记住,帮助您不是任何人的职责。我们希望 Jupyter 能为您服务,但我们无法始终为每个人提供单独的帮助。