从 Jupyter Notebook 在 Voila 中下载文件

Nic*_*ady 8 ipython jupyter jupyter-notebook voila

关于从 Jupyter Notebook 下载文件,有很多问题都有很好的答案。这是我之前添加的一个。这有效,但我无法为使用 Voila 启动的服务器单击并下载该文件。

最初我意识到当点击 Voila 时我无法下载基本案例。

from IPython.display import display, FileLink

local_file = FileLink('./demo.xlsx', result_html_prefix="Click here to download: ")
display(local_file)
Run Code Online (Sandbox Code Playgroud)

输出截图

那是我的笔记本。我可以点击链接并下载文件。当我用 Voila 启动我的笔记本时,它看起来更像这样.. 在此处输入图片说明

点击链接给出 404 ?? 瞧,服务器以

from IPython.display import display, FileLink

local_file = FileLink('./demo.xlsx', result_html_prefix="Click here to download: ")
display(local_file)
Run Code Online (Sandbox Code Playgroud)

由于文件显然没有被提供......我在这里找到了这个链接并尝试:

voila mynotebook.ipynb
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用。

我看到可以提供静态内容,瞧.. 我会继续沿着这条路走下去。以前有人这样做过吗?

Nic*_*ady 5

正如我之前尝试的那样,我可以通过托管我的文件以下载静态内容来使其工作。所有这些都是针对 Mac 的,但对于其他平台来说也是类似的。

\n\n

我必须定义一个自定义模板才能获取文件,static_root以便可以提供它们。此处提供了用于设置自定义模板的相关文档。

\n\n

这并不难......您本质上是在预期的位置创建一个目录,复制一些默认文件,然后添加/更改您想要的内容。终端记录可能看起来像这样:

\n\n
cd ~/Library/Jupyter/voila/templates/\nmkdir foobar\nexport DEFAULT_TEMPLATE_PATH=~/anaconda3/envs/voilatest/share/jupyter/voila/templates/default\nexport TEMPLATE_PATH=~/Library/Jupyter/voila/templates/foobar\ncp -r $DEFAULT_TEMPLATE_PATH/nbconvert_templates $TEMPLATE_PATH\ncp -r $DEFAULT_TEMPLATE_PATH/templates $TEMPLATE_PATH\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的新自定义模板中,树将如下所示:

\n\n
cd ~/Library/Jupyter/voila/templates/\nmkdir foobar\nexport DEFAULT_TEMPLATE_PATH=~/anaconda3/envs/voilatest/share/jupyter/voila/templates/default\nexport TEMPLATE_PATH=~/Library/Jupyter/voila/templates/foobar\ncp -r $DEFAULT_TEMPLATE_PATH/nbconvert_templates $TEMPLATE_PATH\ncp -r $DEFAULT_TEMPLATE_PATH/templates $TEMPLATE_PATH\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意static带有demo.xlsx. 我添加了它。这是我想通过链接下载的文件。

\n\n

像这样开始瞧...

\n\n
voila mynotebook.ipynb --template=foobar\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

现在..在mynotebook.ipynb中

\n\n

使用 HTML 锚标记进行下载。至少FileLink对我来说失败并出现以下错误。

\n\n
\n

路径 (/voila/static/demo.xlsx) 不存在。它可能仍在生成过程中,或者您的路径可能不正确。

\n
\n\n

这并不奇怪,因为文件存储的实际路径不是那个。它恰好是静态内容 uri。

\n\n
 {~/Library/Jupyter/voila/templates/foobar}$  tree .\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 nbconvert_templates\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base.tpl\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lab.tpl\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 voila.tpl\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 static\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 demo.xlsx\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 templates\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 404.html\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 browser-open.html\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 error.html\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 page.html\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tree.html\n\n3 directories, 9 files\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用锚点将使其硬编码,我没有任何问题。无论如何,我还可以对锚点进行更多设计。有一个问题.. 这在常规笔记本中不再起作用,因为它是所提供资源的 URI,瞧。

\n