Загрузка файла в Voila из ноутбука Jupyter - PullRequest
5 голосов
/ 01 февраля 2020

Есть много вопросов с отличными ответами о загрузке файла из ноутбука Jupyter. Вот один , который я добавил ранее. Это работает, но я не могу щелкнуть и загрузить этот файл для сервера, запущенного с Voila.

Изначально я понял, что не могу загрузить чехол basi c при щелчке через Voila.

from IPython.display import display, FileLink

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

output screenshot

Это из моей записной книжки. Я могу нажать на ссылку и скачать файл. Когда я запускаю свой блокнот с Voila, он выглядит примерно так: enter image description here

Если щелкнуть ссылку, получится 404 ☝️ для сервера вуаля, запущенного с

voila mynotebook.ipynb

Поскольку файл явно не обслуживается ... Я нашел эту ссылку здесь и попробовал:

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

, который, к сожалению, не работал.

Я видел, что stati c контент может быть подан в вуаля .. Я буду продолжать играть по этому пути. Кто-нибудь делал это раньше?

1 Ответ

3 голосов
/ 01 февраля 2020

Я смог заставить его работать, разместив свой файл для загрузки в виде * stati c контента, как я пытался раньше. Все это для Ma c, но оно будет аналогичным для других платформ.

Мне пришлось определить собственный шаблон, чтобы получить файлы на 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) не существует. Возможно, он все еще находится в процессе создания, или у вас неправильный путь.

, что неудивительно, поскольку фактический путь к файлу хранится в isn ' т то. Это просто случайный контент URI.

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

Использование якоря сделает его жестко запрограммированным, и у меня не было никаких проблем. Я также смогу стилизовать якорь больше в любом случае. Один улов ... Это больше не работает в обычной записной книжке, так как это URI обслуживаемого ресурса в вуаля.

...