9

关于从 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)

输出截图

那是我笔记本上的。我可以单击链接并下载文件。当我用 Voila 开始我的笔记本时,它看起来更像这样.. 在此处输入图像描述

单击该链接会给出一个 404 ☝️ 用于启动的 voila 服务器

voila mynotebook.ipynb

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

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

不幸的是,这没有用。

我看到静态内容可以在瞧。我会继续玩这条路。有没有人这样做过?

4

1 回答 1

5

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

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

这并不难..您实际上是在预期的位置创建一个目录,复制一些默认文件,然后添加/更改您将要的内容。终端记录可能如下所示:

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. 我把它加进去了。那是我想通过链接下载的文件。

像这样开始瞧...

voila mynotebook.ipynb --template=foobar

现在.. 在mynotebook.ipynb

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

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

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

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

使用锚将使其硬编码,我没有任何问题。无论如何,我也可以为锚定更多样式。一个问题.. 这在常规笔记本中不再适用,因为它是瞧瞧下服务资源的 URI。

于 2020-02-01T03:31:19.077 回答