将 nbconvert 升级到 6.x+ 时如何解决 TemplateNotFound 错误?

Pau*_*aul 6 jupyter jupyter-notebook nbconvert

当尝试使用我过去使用过的模板制作新的基于 Jupyter 的演示文稿时,我发现当nbconvert升级到 6.0 以上时,我收到与缺少内置模板相关的错误basic.tpl。为此,创建一个最小的重现器,创建一个名为的模板文件custom.tpl

{% extends 'basic.tpl' %}
Run Code Online (Sandbox Code Playgroud)

然后拿起任何 Jupyter 笔记本并pip install jupyter nbconvert运行nbconvert notebook.ipynb --to=slides --template=custom.tpl。你会得到这样的异常:

[NbConvertApp] Converting notebook example.ipynb to slides
Traceback (most recent call last):
  File "/tmp/tmp.niaMlxSIbz/venv/bin/jupyter-nbconvert", line 8, in <module>
    sys.exit(main())
...
  File "/tmp/tmp.niaMlxSIbz/custom.tpl", line 1, in top-level template code
    {% extends 'basic.tpl' %}
jinja2.exceptions.TemplateNotFound: basic.tpl

Run Code Online (Sandbox Code Playgroud)

如果您这样做pip install 'nbconvert < 6.0',您会发现相同的命令成功了。

我想这与6.0 中模板工作方式的变化有关,但我相信.tpl模板仍然是受支持的,甚至有一个列出的PR 可以恢复基本模板,但我在任何地方都找不到任何说明如何使用对新位置的引用来更新我的模板。

有没有办法通过更改对 的引用来解决此问题'basic.tpl'

固定到 5.6.1“有效”,但 5.6.1 版本nbconvert不适用于 Python 3.9,并且我需要访问笔记本中的一些较新的 Python 功能。

Aar*_*ffo 2

我不知道.tpl文件是否有直接向后兼容性,但您可以将模板指令迁移到新的模板目录格式。

\n

用于jupyter --paths查找您的用户(或系统)jupyter 配置路径。从那里,您可以将自定义模板添加到模板目录中。

\n
$ jupyter --paths                                                 (master) \xe2\x9c\x93\nconfig:\n    /Users/txoof/.jupyter << user templates can be found here on my system\n    /Users/txoof/.local/share/virtualenvs/folderAudit-FJk3azd9/etc/jupyter << jupyter default templates can be found here\n    /usr/local/etc/jupyter  \n    /etc/jupyter\n
Run Code Online (Sandbox Code Playgroud)\n

我成功地将默认系统模板之一复制到我的用户模板目录中,并将我的指令从 .tpl 文件粘贴到该index.py.j2文件中。

\n

您可以在此处找到有关从 nbconvert 5 迁移到 6 的更多详细信息。

\n

截至 2020 年 11 月,从 5 迁移到 6 的文档非常糟糕,但github 上的 nbconvert 问题非常活跃且很有帮助。

\n