#python #jupyter-notebook #jupyter #nbconvert #jupyter-widget
#питон #jupyter-записная книжка #jupyter #nbконвертировать #jupyter-виджет
Вопрос:
Я использую виджеты Jupyter в своих ноутбуках. Затем мои записные книжки обрабатываются через Sphinx nbsphinx для генерации HTML. Я заметил, что даже в простом примере ниже показан слайдер в моем ноутбуке (в Jupyter Lab), но сгенерированная соответствующая HTML-страница не показывает слайдер.
import ipywidgets as widgets
widgets.IntSlider()
Я знаю, что есть способ заставить виджет отображаться, наблюдая за опубликованным HTML-кодом виджетов Juypter. Их книга построена с использованием Sphinx nbsphinx. Когда я смотрю на их конфигурацию Sphinx, у них включены следующие расширения.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.autosummary',
'sphinx.ext.intersphinx',
'sphinx.ext.mathjax',
'nbsphinx',
'jupyter_sphinx.execute',
'IPython.sphinxext.ipython_console_highlighting',
]
Я считаю, что ключом к рендерингу виджетов из записной книжки в опубликованный HTML является jupyter_sphinx.execute
расширение. Расширения моего проекта следующие. Обратите внимание, что при выдаче make html
появляется предупреждение для изменения jupyter_sphinx.execute
jupyter_sphinx
(однако это не имеет значения, поскольку использование любого из них все равно не отображает виджеты).
extensions = [
'sphinxcontrib.bibtex',
'nbsphinx',
'sphinx.ext.mathjax',
'sphinx_sitemap',
'jupyter_sphinx'
]
Выполнив команду pip list
, я вижу следующие пакеты.
jupyter-клиент 6.1.3 jupyter-консоль 6.1.0 jupyter-ядро 4.6.3 jupyter-сервер-прокси 1.5.0 юпитер-сфинкс 0.3.2 jupyterlab 2.1.4 jupyterlab-комментирование-сервис 0.2 jupyterlab-сервер 1.1.5 nbconvert 6.0.7 nbsphinx 0.8.0 sphinx-autobuild 2020.9.1 sphinx-rtd-тема 0.5.0 sphinx-карта сайта 2.2.0 sphinxcontrib-applehelp 1.0.2 sphinxcontrib-bibtex 1.0.0 sphinxcontrib-blockdiag 2.0.0 sphinxcontrib-devhelp 1.0.2 sphinxcontrib-htmlhelp 1.0.3 sphinxcontrib-jsmath 1.0.1 sphinxcontrib-qthelp 1.0.3 sphinxcontrib-serializinghtml 1.1.4 sphinxcontrib-websupport 1.2.2
Если вы посмотрите на их ipynb
исходный код, все, что вы увидите, находится widgets.IntSlider()
в одной из ячеек (там ничего особенного не происходит). Согласно nbconvert, рендеринг виджетов в реальном времени доступен с версии 4.3.
Любые идеи о том, какие дополнительные настройки или шаги мне не хватает?
Ответ №1:
Хорошо, решение оказалось проще, чем я думал. В Jupyter Lab перейдите в Settings > Save Widget State Automatically
раздел и убедитесь, что этот параметр установлен.
Кроме того, вы можете перейти ~/.jupyter/lab/user-settings/@jupyter-widgets/jupyterlab-manager/plugin.jupyterlab-settings
и настроить параметры следующим образом.
{
// Jupyter Widgets
// @jupyter-widgets/jupyterlab-manager:plugin
// Jupyter widgets settings.
// ******************************************
// Save Jupyter widget state in notebooks
// Automatically save Jupyter widget state when a notebook is saved.
"saveState": true
}
Решение было не столь ясным, но эта страница дала мне несколько подсказок.