出现问题时该怎么办#
首先,请查看下面列出的常见问题。如果您能通过这些说明解决问题,会比寻求帮助更快。
检查您是否已将所有看起来相关的软件包更新到最新版本。不幸的是,要弄清楚哪些软件包是相关的并不总是那么容易,但如果存在一个已经被修复的 bug,那么升级并继续您想做的事情会很简单。
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 无法启动内核#
名为*内核规范*(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
语句产生ImportError
或ModuleNotFound
异常。尝试执行单元格时没有任何反应,表现为常规的内核启动失败。
在这些情况下,请仔细检查您的环境结构,并确保您的 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_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
失败,您无法通过某个单元格。在这种情况下,最好问问自己是否在您的 notebook 开发区域添加了任何新的 python 文件。
通过仔细分析 notebook 错误或 Notebook 服务器命令窗口中产生的追溯信息,通常可以明显看出这些问题。在这些情况下,您通常会发现 Python 内核代码(来自 IPython
和 ipykernel
)正在执行*它自己的*导入,并注意到追溯信息中包含了您 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 包冲突。
寻求帮助#
与任何问题一样,尝试搜索一下是否已经有人找到了答案。如果您找不到现有答案,可以在以下地方提问:
浏览 Github 上的 jupyter/help 代码库(只读)
或者,如果清楚是哪个组件负责,可以在另一个代码库中提交 issue。典型的代码库包括:
jupyter_core -
secure_write()
和文件路径问题jupyter_client - 在 Notebook 服务器的命令窗口中发现的内核管理问题。
IPython 和 ipykernel - 通常在 Notebook 服务器的命令窗口和/或 Notebook 单元格执行中发现的内核运行时问题。
收集信息#
如果您发现您的问题值得在 notebook 中提交一个 issue,请不要忘记提供以下细节:
您看到了什么错误信息(在您的 notebook 中,更重要的是,在 Notebook 服务器的命令窗口中)?
您使用的是什么平台?
您是如何安装 Jupyter 的?
您已经尝试了哪些方法?
jupyter troubleshoot
命令会收集大量关于您安装的信息,这也可能很有用。
在提供文本信息时,如果您能将内容*复制粘贴*到 issue 中,而不是提供截图,那将最有帮助。这使得其他人能够选择部分内容,以便他们可以更有效地搜索并尝试提供帮助。
请记住,帮助您不是任何人的工作。我们希望 Jupyter 能为您所用,但我们不能总是为每个人提供单独的帮助。