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

问题描述

当尝试使用过去使用的模板制作新的基于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相当活跃并且很有帮助。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...