问题描述
当尝试使用过去使用的模板制作新的基于Jupyter的演示文稿时,我发现将nbconvert
升级到6.0以上时,出现与缺少的内置模板有关的错误basic.tpl
。为此的最小复制者,创建一个名为custom.tpl
的模板文件:
{% extends 'basic.tpl' %}
然后拿起任何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
如果您pip install 'nbconvert < 6.0'
,您会发现同一命令成功执行。
我想象这与changes to how templates work that came in 6.0有关,但是我相信.tpl
模板仍然打算得到支持,甚至还有列出的PR that restores the basic template,但是我找不到有关如何通过引用新位置来更新模板的说明。
是否可以通过更改对'basic.tpl'
的引用来解决此问题?
固定到5.6.1“有效”,但是nbconvert
的5.6.1版本不适用于Python 3.9,并且我需要访问笔记本中的一些较新的Python功能。
解决方法
我不知道.tpl
文件是否具有直接的向后兼容性,但是您可以将模板指令迁移到新的模板目录格式。
使用jupyter --paths
查找用户(或系统)的jupyter配置路径。从那里,您可以将自定义模板添加到模板目录中。
$ jupyter --paths (master) ✓
config:
/Users/txoof/.jupyter << user templates can be found here on my system
/Users/txoof/.local/share/virtualenvs/folderAudit-FJk3azd9/etc/jupyter << jupyter default templates can be found here
/usr/local/etc/jupyter
/etc/jupyter
通过将默认的系统模板之一复制到用户模板目录中并将我的.tpl文件中的指令粘贴到index.py.j2
文件中,我获得了成功。
您可以找到有关从nbconvert 5迁移到6 here的更多详细信息。
从2020年11月开始,从5迁移到6的文档非常糟糕,但是nbconvert issues at github相当活跃并且很有帮助。