Я хотел бы запустить nbconvert с препроцессором, который удаляет ячейки, отмеченные тегом «пропустить». Я могу сделать это из командной строки, но когда я пытаюсь использовать API nbconvert в записной книжке, у меня возникают проблемы.
Пример
Следуя примеру в документации, я получаю записную книжку работать с.
from urllib.request import urlopen
url = 'http://jakevdp.github.com/downloads/notebooks/XKCD_plots.ipynb'
response = urlopen(url).read().decode()
import nbformat
nb = nbformat.reads(response, as_version=4)
Я изменю одну ячейку, чтобы она пропускалась при выводе.
nb.cells[1].metadata = {'tags': ['skip']}
Командная строка
Сохранение файла и запуск nbconvert из командной строки:
nbformat.write(nb, 'nb.ipynb')
%%bash
jupyter nbconvert --to latex \
--TagRemovePreprocessor.remove_cell_tags='{"skip"}' \
--TagRemovePreprocessor.enabled=True \
'nb.ipynb'
Это работает. Выходной nb.tex
файл не содержит ячейки с меткой «пропустить».
API
Теперь давайте попробуем использовать вместо этого API. Во-первых, без предварительной обработки:
import nbconvert
latex, _ = LatexExporter().from_notebook_node(nb)
print(latex[:25])
\ documentclass [11pt] {arti
Опять же, без проблем. Конвертация работает.
Теперь, пытаясь использовать тот же препроцессор, который я использовал из командной строки:
from traitlets.config import Config
c = Config()
c.RemovePreprocessor.remove_cell_tags = ('skip',)
c.LatexExporter.preprocessors = ['TagRemovePreprocessor']
LatexExporter(config=c).from_notebook_node(nb)
На этот раз я получаю:
ModuleNotFoundError: нет модуля с именем TagRemovePreprocessor
Насколько я понимаю, этот код соответствует пример кода в документации, за исключением того, что я использую экспортер Latex вместо HTML. Так почему это не работает?