0

我在运行 Apache 的 Ubuntu 20.04 服务器上使用经典的 Jupyter Notebook。

因此,当 Jupyter 运行时,我不使用 localhost:8888 访问它,而是将其代理到 myserver.com/subdir;一般来说,所有的经典 Jupyter 笔记本都可以使用(我可以使用 ipywidgets,我可以控制 matplotlib/plotly/bokeh 绘图)。

然后,我了解到voila- 我只是通过 安装它pip3,我的 Jupyter 安装将它拾取,并将其显示为 nbextension。我以某种方式获得了这些命令行选项来启动我的 Jupyter 服务器:

/home/web/Jupyter/notebook/bin/jupyter-notebook --config=/home/jupyter/.jupyter/jupyter_notebook_config.py --Voila.base_url=/subdir/ --VoilaConfiguration.enable_nbextensions=True

此处还提到了其中一些选项,用于 Jupyter 笔记本(bear_classifier;第 2 课)-第 1 部分(2020 年)-深度学习课程论坛;无论如何,有了这个,我在打开的笔记本的工具栏中得到一个“Voilà”按钮。

因此,如果我的原始笔记本链接位于https://myserver.com/subdir/notebooks/test.ipynb,单击“Voilà”按钮会显示我https://myserver.com/subdir/voila/render/test.ipynb- 事实上,我确实得到了内部呈现的文本(以及 Pandas DataFrame 输出),所以 - 到目前为止,一切都很好。

不幸的是,我仍然没有得到任何 ipywidgets 或情节。查看我的 JavaScript 控制台,我意识到一大堆请求的 JS 文件是 404-ing(即未找到)——当从命令行启动时,这在 Jupyter 服务器日志中也可见:

[I 13:41:52.743 NotebookApp] Kernel started: b7762a2c-f99b-4a9b-ab64-0910c81a4160, name: python3
[W 13:41:55.615 NotebookApp] No handler found for comm target 'matplotlib'
[W 13:41:57.305 NotebookApp] 404 GET /subdir/voila/jquery.js (127.0.0.1) 7.180000ms referer=http://localhost:8888
[W 13:41:57.306 NotebookApp] 404 GET /subdir/voila/base/js/namespace.js (127.0.0.1) 7.690000ms referer=http://localhost:8888
[W 13:41:57.312 NotebookApp] 404 GET /subdir/voila/services/config.js (127.0.0.1) 1.160000ms referer=http://localhost:8888
[W 13:41:57.314 NotebookApp] 404 GET /subdir/voila/notebook/js/codecell.js (127.0.0.1) 0.980000ms referer=http://localhost:8888
[W 13:41:57.321 NotebookApp] 404 GET /subdir/voila/base/js/events.js (127.0.0.1) 5.060000ms referer=http://localhost:8888
[W 13:41:57.322 NotebookApp] 404 GET /subdir/voila/codemirror/lib/codemirror.js (127.0.0.1) 1.000000ms referer=http://localhost:8888
[W 13:41:57.324 NotebookApp] 404 GET /subdir/voila/codemirror/addon/fold/foldcode.js (127.0.0.1) 0.920000ms referer=http://localhost:8888
[W 13:41:57.338 NotebookApp] 404 GET /subdir/voila/codemirror/addon/fold/brace-fold.js (127.0.0.1) 1.440000ms referer=http://localhost:8888
[W 13:41:57.345 NotebookApp] 404 GET /subdir/voila/codemirror/addon/fold/indent-fold.js (127.0.0.1) 5.140000ms referer=http://localhost:8888
...

这甚至没有Voila.base_url参数 - 我在上面的命令行中添加了参数,希望它能解决这个问题,但显然没有。

至少,我可以从 Firefox 中的 JavaScript 控制台确认,这些 404 是由 TornadoServer(服务 Jupyter 的服务器)而不是 Apache 响应的。

Firefox JavaScript 控制台中也有这些消息:

...
The resource from “https://myserver.com/subdir/voila/codemirror/lib/codemirror.js” was blocked due to MIME type (“text/html”) mismatch (X-Content-Type-Options: nosniff).
testplots.ipynb
Loading failed for the <script> with source “https://myserver.com/subdir/voila/codemirror/lib/codemirror.js”.
...

(编辑:当普通的 jupyter 笔记本成功加载时,它来自一个类似的 URL https://myserver.com/subdir/static/components/codemirror/addon/fold/foldcode.js

我怀疑这是由于 MIME 类型配置错误造成的,但由于在 404 中报告了相同的文件,我猜这是浏览器对 MIME 类型的 404 消息做出反应 - 所以一切都应该符合预期。

我几乎可以肯定这些 404 是由于代理时的“subdir/”路径而发生的——但我很茫然,如何告诉我voila要考虑到这一点。

有谁知道如何解决这个问题,所以可以下载 .js 文件,并且瞧,渲染可以完全工作吗?


编辑:可能相关:使用时--enable_nbextensions=True,文件上出现大量 403 错误base/js/*.js·问题 #733·瞧-仪表板/瞧

似乎某些扩展需要 jquery 和 base/js/*.js 文件才能通过 RequireJS 加载?

...

这是因为 voila 看不到用于 jupyter-widgets 的扩展和 jupyter notebook 特定扩展之间的区别(不支持也不支持)。因此,这些扩展假定一个笔记本环境,其中定义了(或可用)这些模块,但它们没有。404 没问题,只是它们不存在,即使它们存在也无法工作。最好的方法是不要在特定于笔记本的 Python 环境中安装扩展。

4

0 回答 0