我在我的计算机上为 RHEL 系统安装了 jupyter notebook,我使用命令安装了它pip3 install --user jupyter
,后来由于它不工作pip3 install --force-reinstall --user jupyter
,所以我知道我的 jupyter 文件存储在我的~/.local/bin
目录中。我不是我工作的集群的管理员或超级用户,这就是我安装在的原因~/.local/bin
。现在,每当我启动 jupyter notebook 并打开 .ipynb 文件时,内核都会停留在“内核正在启动,请等待...”状态,直到内核退出。我试图看看浏览器是否影响了它,现在我在 Internet Explorer 11、Chrome 和 Edge 上尝试过,它们都做同样的事情。我不知道是什么阻止了内核加载。
编辑(2019 年 12 月 2 日):似乎有一个可能的解决方案,详情这里但是,这些是描述如何在 Windows 系统上降级的解决方案,而我正在操作基于 Linux 的操作系统。
编辑(2019 年 12 月 3 日):经过进一步调查,我发现 Jupyter 页面上的“内核正在启动,请等待...”消息对应于终端回显:
RuntimeError: Permissions assignment failed for secure file: ':/path/to/user/tmp/jupyter-kernel:/path/to/user/jupyter-kernel/kernel-66b8b6e5-5e4c-4b05-98e9-870a5b431088.json'.Got '0o1600' instead of '0o0600'
这个问题似乎在Jupyter 的 github 问题页面,我尝试按照规定操作,即将 更改$JUPYTER_RUNTIME_DIR
为新位置,但没有成功(我实际上尝试了不同的目录位置),我确保内核 .json 文件位于正确的位置。我仍然继续收到相同的错误。我的系统给我的 os.name 是 POSIX,所以我不知道这是否是根本问题,因为错误源于名为 path.py 的文件,似乎是 secure_write() 中的问题,以下是部分代码:
@contextmanager
def secure_write(fname, binary=False):
"""Opens a file in the most restricted pattern available for
writing content. This limits the file mode to `0o0600` and yields
the resulting opened filed handle.
Parameters
----------
fname : unicode
The path to the file to write
binary: boolean
Indicates that the file is binary
"""
mode = 'wb' if binary else 'w'
open_flag = os.O_CREAT | os.O_WRONLY | os.O_TRUNC
try:
os.remove(fname)
except (IOError, OSError):
# Skip any issues with the file not existing
pass
if os.name == 'nt':
# Python on windows does not respect the group and public bits for chmod, so we need
# to take additional steps to secure the contents.
# Touch file pre-emptively to avoid editing permissions in open files in Windows
fd = os.open(fname, os.O_CREAT | os.O_WRONLY | os.O_TRUNC, 0o0600)
os.close(fd)
open_flag = os.O_WRONLY | os.O_TRUNC
win32_restrict_file_to_user(fname)
with os.fdopen(os.open(fname, open_flag, 0o0600), mode) as f:
if os.name != 'nt':
# Enforce that the file got the requested permissions before writing
file_mode = get_file_mode(fname)
if 0o0600 != file_mode:
raise RuntimeError("Permissions assignment failed for secure file: '{file}'."
"Got '{permissions}' instead of '0o0600'"
.format(file=fname, permissions=oct(file_mode)))
yield f
答案1
一个解决方法-在 Jupyter core v4.6.2 中,你现在可以将环境变量设置JUPYTER_ALLOW_INSECURE_WRITES
为1
或true
,以禁用此检查
细节:https://discourse.jupyter.org/t/jupyter-core-4-6-2-release-with-insure-mode-option/3300
jupyter_client==5.3.1
在进行安全更改之前,最后一个工作版本是
答案2
对我来说,这个问题是由 ExpressVPN 的白名单(隧道分离)功能干扰 Jupyter 引起的。我禁用了隧道分离,只使用了浏览器 VPN 扩展。仅供参考,NordVPN 的隧道分离功能勉强可用,而 SurfShark、ExpressVPN 和许多其他功能可能完全失效。