Nbconvert and voila no ipywidgets

Hi,

we are currently using JupyterHub for our team of mostly non programmers. ( Zero to JupyterHub with Kubernetes).

We want to use voila to provide the notebooks as web apps. We have installed it on the server and it runs with a reverse proxy (jupyter-server-proxy), witch works fine.

However, Voila does not display everything from the notebooks. Markdown, HTML elements, normal output and plots (Seaborn) are displayed without problems.

Unfortunately, no ipywidgets are displayed. Instead, only an empty output is displayed.

I also tried nbconvert alone with jupyter nbconvert --to html with the same result.

This is what I get with voila:

I already tried different versions of nbconvert and have Save Widget State Automatically on true.

Packages

Name Version

absl-py 1.3.0
aiohttp 3.8.3
aiosignal 1.3.1
alembic 1.8.1
altair 4.2.0
anyio 3.6.2
appmode 0.8.0
argon2-cffi 21.3.0
argon2-cffi-bindings 21.2.0
asn1crypto 1.5.1
asttokens 2.1.0
astunparse 1.6.3
async-generator 1.10
async-timeout 4.0.2
attrs 22.1.0
Babel 2.11.0
backcall 0.2.0
backports.functools-lru-cache 1.6.4
beautifulsoup4 4.11.1
bleach 5.0.1
blinker 1.5
bokeh 3.0.1
boto3 1.26.5
botocore 1.29.6
Bottleneck 1.3.5
branca 0.6.0
brotlipy 0.7.0
cached-property 1.5.2
cachetools 5.2.0
certifi 2022.9.24
certipy 0.1.3
cffi 1.15.1
charset-normalizer 2.1.1
click 8.1.3
cloudpickle 2.2.0
colorama 0.4.6
conda 22.9.0
conda-package-handling 1.9.0
contourpy 1.0.6
cryptography 38.0.3
cycler 0.11.0
Cython 0.29.32
cytoolz 0.12.0
dask 2022.10.0
debugpy 1.6.3
decorator 5.1.1
defusedxml 0.7.1
dill 0.3.6
distributed 2022.10.0
ecdsa 0.18.0
enbw-aop-client 0.20221027.1
entrypoints 0.4
entsoe-py 0.5.8
envs 1.4
et-xmlfile 1.0.1
executing 1.2.0
fastjsonschema 2.16.2
filelock 3.8.0
Flask 2.2.2
flatbuffers 2.0
flit_core 3.8.0
fonttools 4.38.0
frozenlist 1.3.3
fsspec 2022.10.0
gast 0.4.0
geographiclib 1.52
geopy 2.2.0
gitdb 4.0.9
GitPython 3.1.29
gmpy2 2.1.2
google-auth 2.14.0
google-auth-oauthlib 0.4.6
google-pasta 0.2.0
gravis 0.1.0
greenlet 2.0.1
grpcio 1.47.1
h11 0.14.0
h5py 3.7.0
HeapDict 1.0.1
idna 3.4
imagecodecs 2022.9.26
imageio 2.22.0
importlib-metadata 5.0.0
importlib-resources 5.10.0
ipykernel 6.17.1
ipyleaflet 0.17.2
ipympl 0.9.2
ipython 8.6.0
ipython-genutils 0.2.0
ipywidgets 8.0.2
itsdangerous 2.1.2
jedi 0.18.1
Jinja2 3.1.2
jmespath 1.0.1
joblib 1.2.0
json5 0.9.10
jsonschema 4.17.0
jupyter_client 7.4.1
jupyter_core 5.0.0
jupyter-server 1.23.1
jupyter-server-mathjax 0.2.6
jupyter-server-proxy 3.2.2
jupyter-telemetry 0.1.0
jupyterhub 3.0.0
jupyterlab 3.5.0
jupyterlab-git 0.39.3
jupyterlab-pygments 0.2.2
jupyterlab_server 2.16.2
jupyterlab-widgets 3.0.3
keras 2.10.0
Keras-Preprocessing 1.1.2
kiwisolver 1.4.4
libmambapy 1.0.0
llvmlite 0.39.1
locket 1.0.0
lxml 4.9.1
lz4 4.0.2
Mako 1.2.3
mamba 1.0.0
Markdown 3.4.1
MarkupSafe 2.1.1
matplotlib 3.6.2
matplotlib-inline 0.1.6
mistune 2.0.4
mpmath 1.2.1
msgpack 1.0.4
multidict 6.0.2
munkres 1.1.4
nbclassic 0.4.8
nbclient 0.7.0
nbconvert 6.4.5
nbdime 3.1.1
nbformat 5.7.0
nbtools 21.12
nest-asyncio 1.5.6
networkx 2.8.8
neurolab 0.3.5
notebook 6.5.2
notebook_shim 0.2.2
ntlm-auth 1.5.0
numba 0.56.3
numexpr 2.8.3
numpy 1.23.4
oauthlib 3.2.2
openpyxl 3.0.10
opt-einsum 3.3.0
oscrypto 1.2.1
outcome 1.2.0
packaging 21.3
pamela 1.0.0
pandas 1.5.1
pandocfilters 1.5.0
parso 0.8.3
partd 1.3.0
patsy 0.5.3
pexpect 4.8.0
pickleshare 0.7.5
Pillow 9.2.0
pip 22.3.1
pkgutil_resolve_name 1.3.10
platformdirs 2.5.3
plotly 5.11.0
pretty-html-table 0.9.11
prometheus-client 0.15.0
prompt-toolkit 3.0.32
protobuf 4.21.9
psutil 5.9.4
ptyprocess 0.7.0
pure-eval 0.2.2
pyarrow 9.0.0
pyasn1 0.4.8
pyasn1-modules 0.2.7
pycognito 2022.4.0
pycosat 0.6.4
pycparser 2.21
pycryptodomex 3.15.0
pycurl 7.45.1
pydantic 1.10.2
Pygments 2.13.0
PyJWT 2.6.0
pyOpenSSL 22.1.0
pyparsing 3.0.9
pyproj 3.4.0
pyrsistent 0.19.2
PySocks 1.7.1
python-dateutil 2.8.2
python-jose 3.3.0
python-json-logger 2.0.1
pytz 2022.6
pytz-deprecation-shim 0.1.0.post0
pyu2f 0.1.5
PyWavelets 1.3.0
PyYAML 6.0
pyzmq 24.0.1
requests 2.28.1
requests-ntlm 1.1.0
requests-oauthlib 1.3.1
requests-toolbelt 0.10.1
rpy2 3.5.1
rsa 4.9
ruamel.yaml 0.17.21
ruamel.yaml.clib 0.2.7
ruamel-yaml-conda 0.15.80
s3transfer 0.6.0
scikit-image 0.19.3
scikit-learn 1.1.3
scipy 1.9.3
seaborn 0.12.1
selenium 4.6.0
Send2Trash 1.8.0
setuptools 65.5.1
SharePlum 0.5.1
simpervisor 0.4
simplegeneric 0.8.1
six 1.16.0
smmap 3.0.5
sniffio 1.3.0
snowflake-connector-python 2.8.1
sortedcontainers 2.4.0
soupsieve 2.3.2.post1
SQLAlchemy 1.4.43
stack-data 0.6.0
statsmodels 0.13.5
sympy 1.11.1
tables 3.7.0
tblib 1.7.0
tenacity 8.1.0
tensorboard 2.10.1
tensorboard-data-server 0.6.0
tensorboard-plugin-wit 1.8.1
tensorflow 2.10.0
tensorflow-estimator 2.10.0
termcolor 2.1.0
terminado 0.17.0
terminaltables 3.1.10
testpath 0.6.0
threadpoolctl 3.1.0
tifffile 2022.10.10
tinycss2 1.2.1
tomli 2.0.1
toolz 0.12.0
tornado 6.2
tqdm 4.64.1
traitlets 5.5.0
traittypes 0.2.1
trash-cli 0.22.10.20
trio 0.21.0
trio-websocket 0.9.2
typing_extensions 4.4.0
tzdata 2022.6
tzlocal 4.2
unicodedata2 15.0.0
urllib3 1.26.12
usp.common.data 5.1.0
usp.common.util 0.0.1
voila 0.4.0
wcwidth 0.2.5
webencodings 0.5.1
websocket-client 1.4.2
websockets 10.4
Werkzeug 2.2.2
wheel 0.38.3
widgetsnbextension 4.0.3
wrapt 1.14.1
wsproto 1.2.0
xlrd 2.0.1
XlsxWriter 3.0.3
xyzservices 2022.9.0
yarl 1.8.1
zict 2.2.0
zipp 3.10.0

Does anyone have an idea?

Cross-posted here at StackOverflow.

You aren’t providing what your test notebook code is, just a screenshot of output in your Voila rendering.

It runs well where Voila works well such as in sessions from the Voila repo served via MyBinder, which you can try by clicking here? After the session comes up drag-and-drop in your test notebook in the panel on the left and then open it and click the Voila icon from the right-side of the toolbar just above the notebook.

It runs perfectly in the environment on MyBinder.

My code is very similar to the code of the sample notebooks from voila/notebooks at main · voila-dashboards/voila · GitHub. I also tested them and got the same result in our environment with no output.

For the sake of completeness my code (only the parts with widgets):

Code
import ipywidgets as widgets
from IPython.display import display
import nbconvert
import voila
import ipywidgets as widgets

slider = widgets.FloatSlider(description='$x$')
text = widgets.FloatText(disabled=True, description='$x^2$')

def compute(*ignore):
    text.value = str(slider.value ** 2)

slider.observe(compute, 'value')

slider.value = 4

widgets.VBox([slider, text])
w = widgets.IntSlider()
display(w)