从 Jupyter Notebook 在 Voila 中下载文件

File download in Voila from Jupyter Notebook

关于从 Jupyter Notebook 下载文件,有很多问题和很好的答案。 Here's one 我之前补充的。这行得通,但我无法为使用 Voila 启动的服务器单击并下载该文件。

原来我是在点击Voila的时候发现基本案例下载不了

from IPython.display import display, FileLink

local_file = FileLink('./demo.xlsx', result_html_prefix="Click here to download: ")
display(local_file)

那是我笔记本上的。我可以单击 link 并下载文件。当我用 Voila 开始我的笔记本时,它看起来更像这样……

点击 link 给一个 404 ☝️ 对于以

启动的 voila 服务器
voila mynotebook.ipynb

由于显然没有提供文件...我找到 this link here 并尝试了:

voila mynotebook.ipynb --VoilaConfiguration.file_whitelist="['demo.xlsx']"

不幸的是没有用。

我看到可以在 voila 中提供静态内容。我会继续沿着这条路走下去。有人做过吗?

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

我必须定义一个自定义模板才能在 static_root 获取文件,以便可以提供这些文件。与设置自定义模板相关documentation is here

这并不困难.. 您基本上可以在预期的位置创建一个目录,复制一些默认文件,然后 add/change 您将要复制的内容。终端记录可能看起来像这样:

cd ~/Library/Jupyter/voila/templates/
mkdir foobar
export DEFAULT_TEMPLATE_PATH=~/anaconda3/envs/voilatest/share/jupyter/voila/templates/default
export TEMPLATE_PATH=~/Library/Jupyter/voila/templates/foobar
cp -r $DEFAULT_TEMPLATE_PATH/nbconvert_templates $TEMPLATE_PATH
cp -r $DEFAULT_TEMPLATE_PATH/templates $TEMPLATE_PATH

树在我的新自定义模板中看起来像这样:

 {~/Library/Jupyter/voila/templates/foobar}$  tree .
.
├── nbconvert_templates
│   ├── base.tpl
│   ├── lab.tpl
│   └── voila.tpl
├── static
│   └── demo.xlsx
└── templates
    ├── 404.html
    ├── browser-open.html
    ├── error.html
    ├── page.html
    └── tree.html

3 directories, 9 files

注意 static 目录和 demo.xlsx。我把它加进去了。那是我想通过 link.

下载的文件

像这样开始瞧...

voila mynotebook.ipynb --template=foobar

现在..在mynotebook.ipynb

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

Path (/voila/static/demo.xlsx) doesn't exist. It may still be in the process of being generated, or you may have the incorrect path.

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

%%html
<a href="./voila/static/demo.xlsx" download="demo.xlsx">Download Excel Sheet</a>

使用锚点会使它硬编码,我没有遇到任何问题。无论如何,我也可以为锚定更多样式。一个问题.. 这在普通笔记本中不再有效,因为它是 voila 下服务资源的 URI。