jupyter nbconvert to html: datatable and qgrid not shown in html output - python

Datatables and SlickGrid tables are not shown in the final html file after nbconvert'ing a previously executed ipynb file.
The python libraries I am using are:
qgrid https://github.com/quantopian/qgrid
jupyter_datatables https://pypi.org/project/jupyter-datatables/
What I'm attempting
I am rendering dataframes as html tables in my jupyter notebook.
When executing the notebook manually all works well (i.e. the tables are shown).
For instance, a cell using qgrid looks something like this
qgrid_widget = qgrid.show_grid(my_dataframe)
qgrid_widget
I run the notebook, tables are shown, all works well...
Where things break...
But when I convert the notebook to html afterwards, running
jupyter nbconvert --to html my_notebook.ipynb --no-input
The tables are not shown (while all other output is). This happens with both qgrid and jupyter_datatables.
I assume that has something to do with properly loading the underlying javascript libraries.
How do I need to run nbconvert to render these tables correctly?
Thanks

Related

How to make Cell input part (code) disappear -show only output- when creating slides using Jupyter notebook and nbconvert?

I am trying to create slides for a data analysis task using jupyter notebook and nbconvert Python module.
I want to show the output of a cell which is the visualization part, and I want to get rid of the code part.
It is created but with the code part in the slide.
I tried a solution from Udacity Data Analysis Nano degree which suggests installing a pre-written template and then running the command:
jupyter nbconvert Example_Project_Diamonds_Part2.ipynb --to slides --post serve --template output_toggle
The template
but I get the error that 'slides_reveal.tpl' template does not exist, and when I try to download it from the internet I keep getting the same error but for different template names (It's like a vortex).
Open the Jupyter notebook Home page.
Choose New (on the top right) then Terminal.
Go to the directory of your .ipynb file.
Type the following command in the prompt:
jupyter nbconvert --to slides <filename>.ipynb --TemplateExporter.exclude_input=True
or you can just type in the jupyter notebook itself:
!jupyter nbconvert --to slides <filename>.ipynb --TemplateExporter.exclude_input=True

Some HTML presentations created using nbconvert from notebooks are not showing Plotly plots

I'm using Plotly inside a notebook.
I have this in one of my cells.
from IPython.display import Javascript
from plotly.offline import get_plotlyjs
Javascript(get_plotlyjs())
I load data and run Plotly in another cell. The plots show in the notebook. I save the notebook and run this from the command line.
jupyter nbconvert notbook.ipynb --to slides --no-prompt --embed-images
For some notebooks, I'm seeing the plots embedded in the HTML. For other notebooks, they are missing.
When the notebooks are missing, I'm seeing this error:
python3.9/site-packages/nbconvert/filters/widgetsdatatypefilter.py:69: UserWarning: Your element with mimetype(s) dict_keys(['application/vnd.plotly.v1+json']) is not able to be represented.
warn("Your element with mimetype(s) {mimetypes}"
The error comes from running the notebook inside VS Code.
Running the notebook in jupyter lab and then saving it solves the problem. You can now run jupyter nbconvert and create an HTML presentation with plots.

Combine 'toc' and 'hide input' when using nbconvert html export

I would like to export my Jupyter notebook to html displaying the table of contents (toc2) AND hiding the input cells at the same time in the export.
I use a template to hide the code (https://github.com/ihuston/jupyter-hide-code-html), which works fine for itself.
For displaying the table of contents I run the command jupyter nbconvert --to html_toc FILE.ipynb, which works as well.
As soon as I try to combine both by jupyter nbconvert --to html_toc --template HIDE_CELL FILE.ipynb, only cells are hidden, but the toc is not shown anymore. Has anyone found a solution to combine both functions?
Thank you for your help!
I tried this command below and it hides the code and generates table of contents:
jupyter nbconvert /path/filename --to=html_toc --TemplateExporter.exclude_input=True
The above worked for: Ubuntu 18.10 and jupyter lab.

Hide Code when exporting Jupyter notebook to HTML

I'm looking for a way to hide code cells (inputs) when export my .iipynb file to a HTML. I don't want the code cells to be visible at all (not some button that turn them off/on). The output is for people that have no idea what a programming language is. I tried many things that I found on the internet but nothing seems to work.
Thanks
as of now (nbconvert version 5.6.0) the easiest solution seems to be to provide the argument --no-input when using the CLI interface of nbconvert:
jupyter nbconvert yourNotebook.ipynb --no-input
it works like magic
more info here
You can do this with an NBConvert template. Most of the examples out there are for latex/PDF, and won't work with HTML, which uses a different set of templates (and, for some reason, a different extension and slightly different file syntax).
Write the following into a template file called hidecode.tpl:
{%- extends 'full.tpl' -%}
{% block input_group %}
{%- if cell.metadata.get('nbconvert', {}).get('show_code', False) -%}
((( super() )))
{%- endif -%}
{% endblock input_group %}
Then convert your notebook to HTML with:
jupyter nbconvert --to html --template hidecode YourNotebook.ipynb
In recent versions of jupyter nbconvert you can use the --no-input option:
echo 'A Markdown cell with an equation $x=y+1$
```python
1 + 1
```
' | jupytext --to ipynb | jupyter nbconvert --stdin --execute --no-input --to html --output notebook.html
Now if you don't have the --no-input option, use --TemplateExporter.exclude_input=True, which is available from version 5.2.1 on.
I wrote an article about different ways how to hide code in Jupyter Notebook. According to my findings, there are several ways in which this can be done.
1. Hide all code in nbconvert
When exporting notebook with nbconvert you need to add --no-input in the command:
jupyter nbconvert --to html --no-input your-notebook.ipynb
2. Hide selected cells
You can hide selected cells by adding a tag hide_code, like in the animation below:
The command that hide code only for selected cells:
jupyter nbconvert --to html --TagRemovePreprocessor.remove_cell_tags='{"hide_code"}' my-notebook.ipynb
3. Export to HTML with Mercury
The Mercury is an open-source for sharing notebooks with non-technical users. It can hide code. It can also generate widgets for the notebook that are connected with variables in the code. The notebook export process is controlled with YAML header, below is the example YAML that hides the code:
---
title: My notebook
description: My amazing notebook with hidden code
show-code: False
---
The example notebook with YAML header:
The HTML (website) generated for the notebook with Mercury:
Complementing #vincentVega answer, you need to add the --to statement, otherwise it will throw the following error: ValueError: Please specify an output format with '--to <format>'.
jupyter nbconvert YourNotebook.ipynb --no-input --to html
Have your jupyter notbook ready
Go to Anaconda Prompt -> location of the jupyter notebook and enter the below command
jupyter nbconvert yourNotebook.ipynb --no-input --no-prompt
This will convert the Jupyter notebook to html with all the cells aligned to right.
I finaly found that : https://pypi.org/project/hide_code/0.2.0/
It's a jupyter extension and it's working like a charm. I use the command prompt to convert the notebook into an html, since the buttons that comes with the extension don't work for me.
For my use case I wanted to be able to create export without outputs from within a notebook, and with as little manual work as possible. An adequate solution I managed to glue together is as follows:
In first cell execute some javascript to get the name of the current notebook. The name will be stored in the nb_name variable which accessible within current python runtime scope.
Cell 1:
%%javascript
IPython.notebook.kernel.execute('nb_name = "' + IPython.notebook.notebook_name + '"')
In cell 2 pass the obtained name to a shell call and store a html with --no-input. The "!" in a jupyter notebook indicates a shell call and "&" is used to pass a variable from current python runtime scope to the shell call.
Cell 2:
print(nb_name)
!jupyter nbconvert --output-dir='./docs' --no-input --to html $nb_name
Conversion of ipynb code file to a HTML file without code(Using Python)::
Step1: Suppose your file Untitled.ipynb is saved in your laptop's Downloads folder.
Step2: Open Anaconda prompt or Cmd , Paste the below command to hide the codes and save the file as Untitled.html:
cd Downloads
jupyter nbconvert Untitled.ipynb --to=html --TemplateExporter.exclude_input=True
Note: path to the Untitled.ipynb could be different and needs to be changed where we are using cd Downloads to cd new_path.
I used nbinteract (https://www.nbinteract.com/) to publish the page and #HIDDEN (https://gitter.im/nbinteract/Lobby/) on top of the cell. It is undocumented and bound to change, but they'll keep it for backwards compatibility..
For others that might want to hide a specific code cell, one solution is to use a command line tool in nbdev package (developed by fastai) to export jupyter notebooks to markdown. The command is nbdev_nb2md.
When you do this, if you put #hide at the top of any notebook cell, it won't be exported to markdown. It will be ignored.
See this blog post for full details: https://www.fast.ai/2020/01/20/nb2md/

Jupyter reveal based slideshow

I want to create a presentation such this starting from a simple Jupyter notebook.
What I have looks like:
Given that, I'd expect to get a slideshow with two slides corresponding to the two cells.
Then from the command line I execute:
jupyter nbconvert --to slides mynotebook.ipynb --post serve
What I get is a static html page that seems to group both of my cells together.
How do I get the type of one slide per cell effect of the linked presentation?
You may need to include a reference to the reveal.js package in your nbconvert command:
jupyter nbconvert --to slides --reveal-prefix="http://cdn.jsdelivr.net/reveal.js/2.5.0 mynotebook.ipynb --post serve
Or, for instructions on using a local version of reveal.js, see this blog post by Damian Avila
Have you tried opening the generated HTML with your browser?
I had the same issue on a fresh install of Lubuntu in a VirtualBox. It worked fine (using the --post serve flag) on my host system (OSX) but not in the VB. I didn't find much on the internets, so I just tried loading the XXXX.slides.html file with my browser and that appears to have solved it.
Summary:
$ jupyter nbconvert --to slides --reveal-prefix ../reveal.js XXXX.ipynb # using "--post serve" fails
$ firefox XXXX.slides.html
Hope this helps!

Categories