当事情出错时该怎么办#
首先,查看下面列出的常见问题。如果你能从这些笔记中找到答案,会比寻求帮助更快。
检查你是否拥有任何看起来相关的软件包的最新版本。不幸的是,并不总是很容易确定哪些软件包是相关的,但如果存在已经修复的错误,升级并继续你想要做的事情很容易。
Jupyter 无法启动#
你已经安装它了吗? ;-)
如果你使用菜单快捷键或 Anaconda 启动器来启动它,尝试打开一个终端或命令提示符并运行命令
jupyter notebook
。如果它找不到
jupyter
,你可能需要配置你的PATH
环境变量。如果你不知道这意味着什么,也不想弄清楚,只需(重新)安装 Anaconda 并使用默认设置,它应该正确设置 PATH。如果 Jupyter 给出一个错误,说它找不到
notebook
,请使用 pip 或 conda 检查notebook
软件包是否已安装。尝试运行
jupyter-notebook
(带连字符)。这通常应该与jupyter notebook
(带空格)相同,但如果有任何区别,带连字符的版本是“真正的”启动器,而另一个版本则包装了它。
Jupyter 无法加载或无法在浏览器中工作#
尝试在另一个浏览器中(例如,如果你通常使用 Firefox,尝试使用 Chrome)。这有助于确定问题出在哪里。
尝试禁用任何浏览器扩展和/或你安装的任何 Jupyter 扩展。
一些互联网安全软件会干扰 Jupyter。如果你有安全软件,尝试暂时关闭它,并在设置中寻找更长期的解决方案。
在地址栏中,尝试在
localhost
和127.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
代码单元格中的语句产生ImportError
或ModuleNotFound
异常。尝试执行单元格时,没有任何反应,表现出一般的内核启动失败。
在这些情况下,仔细查看您的环境结构,并确保笔记本代码所需的所有包都安装在正确的环境中。如果您需要从与笔记本服务器不同的环境运行内核,请查看 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_core
的secure_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 内核代码(来自 IPython
和 ipykernel
)执行其导入,并注意到来自笔记本开发错误的文件包含在该回溯中,后面跟着一个 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 包冲突。
寻求帮助#
与任何问题一样,请尝试搜索以查看是否有人已经找到了答案。如果您找不到现有的答案,您可以在以下位置提问:
仔细阅读 jupyter/help 存储库在 Github 上(只读)
或者在另一个存储库的问题中,如果清楚哪个组件负责。典型的存储库包括
jupyter_core -
secure_write()
和文件路径问题jupyter_client - 在笔记本服务器的命令窗口中发现的内核管理问题。
收集信息#
如果您发现您的问题需要在 notebook 中打开一个问题,请不要忘记提供以下详细信息
您看到了哪些错误消息(在您的笔记本中,更重要的是,在笔记本服务器的命令窗口中)?
您在哪个平台上?
您是如何安装 Jupyter 的?
您已经尝试过什么?
The jupyter troubleshoot
命令收集有关您的安装的许多信息,这也很有用。
在提供文本信息时,如果您能将内容抓取到问题中,而不是提供屏幕截图,这将非常有帮助。这使其他人能够选择该内容的部分,以便他们能够更有效地搜索并尝试提供帮助。
请记住,帮助您不是任何人的职责。我们希望 Jupyter 能为您服务,但我们无法始终为每个人提供单独的帮助。