How do you convert an IPython notebook file (json with .ipynb
extension) into a regular .py
module?

- 28,235
- 9
- 60
- 81

- 1,367
- 3
- 9
- 10
-
1Possible duplicate of [How do I convert a IPython Notebook into a Python file via commandline?](https://stackoverflow.com/questions/17077494/how-do-i-convert-a-ipython-notebook-into-a-python-file-via-commandline) – Arya McCarthy Sep 24 '17 at 23:18
17 Answers
From the notebook menu you can save the file directly as a python script. Go to the 'File' option of the menu, then select 'Download as' and there you would see a 'Python (.py)' option.
Another option would be to use nbconvert from the command line:
jupyter nbconvert --to script 'my-notebook.ipynb'
Have a look here.

- 3,999
- 1
- 17
- 26
-
An additional way to call nbconvert it is to do it automatically on save with the jupyter_notebook_confg.py file -- See http://stackoverflow.com/a/25765194/1653571 – Dave X Feb 10 '17 at 18:04
-
I don't seem to have ipython or jupyter installed, so I'm unaware of how to get to the notebook menu. – Dave Sims May 03 '17 at 00:04
-
1@DaveGoldsmith Run `pip install jupyter`. Once it's installed, go to your project directory and run `jupyter notebook`. It should open a web browser automatically, otherwise open one and go to `http://localhost:8888/notebooks/` to start creating or working with notebooks. – WordBrewery May 31 '18 at 03:35
-
-
Doesn't work with `ipython [8.7.0]`. Returns warnings: `Unrecognized alias: 'to', it will have no effect.` and `File 'nbconvert' doesn't exist` – DannyDannyDanny Jan 04 '23 at 17:19
According to https://ipython.org/ipython-doc/3/notebook/nbconvert.html you are looking for the nbconvert command with the --to script option.
ipython nbconvert notebook.ipynb --to script

- 956
- 6
- 14
-
2Getting this notice now, FYI: `[TerminalIPythonApp] WARNING | Subcommand 'ipython nbconvert' is deprecated and will be removed in future versions. [TerminalIPythonApp] WARNING | You likely want to use 'jupyter nbconvert' in the future` – Matt Oct 03 '17 at 21:29
-
1@Matt ipython has been renamed to jupyter. The message is telling you that the old executable name is deprecated. The convert command itself isn't. – Adam Oct 20 '17 at 12:48
-
3
In short: This command-line option converts mynotebook.ipynb
to python
code:
jupyter nbconvert mynotebook.ipynb --to python
note: this is different from above answer. ipython
has been renamed to jupyter
. the old executable name (ipython) is deprecated.
More details:
jupyter
command-line has an nbconvert
argument which helps convert notebook files (*.ipynb)
to various other formats.
You could even convert it to any one of these formats using the same command but different --to
option:
- asciidoc
- custom
- html
- latex. (Awesome if you want to paste code in conference/journal papers).
- markdown
- notebook
- python
- rst
- script
- slides. (Whooh! Convert to slides for easy presentation )
the same command jupyter nbconvert --to latex mynotebook.ipynb
For more see jupyter nbconvert --help
. There are extensive options to this. You could even to execute the code first before converting, different log-level options etc.

- 71,928
- 54
- 216
- 264
-
This is not really different than @Kush's answer, just the command name has changed since his answer. – James Hirschorn Oct 15 '22 at 12:17
you can use this to do that :
pip install ipynb-py-convert
then run this on your terminal to convert .py file to .ipynb :
ipynb-py-convert Ex/abc.py Ex/abc.ipynb
to convert .ipynb files to .py :
ipynb-py-convert Ex/abc.ipynb Ex/abc.py

- 334
- 2
- 7
well first of all you need to install this package below:
sudo apt install ipython
jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb
two options are available either --to python or --to=python
for me this works fine:
jupyter nbconvert --to python while.ipynb
[NbConvertApp] Converting notebook while.ipynb to python
[NbConvertApp] Writing 758 bytes to while.py
pip3 install ipython
if it does not work for you try, by pip3.
pip3 install ipython

- 7,106
- 3
- 41
- 86

- 1,616
- 16
- 17
Tested on Ubuntu 20.04
Install required packages for PIP
$ pip install ipython
$ pip install nbconvert
To install required packages
$ sudo apt-get install texlive-xetex texlive-fonts-recommended texlive-plain-generic
METHOD 1
Use jupyter nbconvert command to convert to different format
Source file pro.ipynb
To convert to ascii
$ jupyter nbconvert --to asciidoc pro.ipynb
To convert to pdf
$ jupyter nbconvert --to pdf pro.ipynb
To convert to python
$ jupyter nbconvert --to python pro.ipynb
METHOD 2
Convert ipynb project through python code use savefig method of pyplot:
pro.ipynb
import matplotlib.pyplot as plt
%matplotlib inline
exp_vals=[1400,600,300,410,250]
exp_labels=['Home Rent','Food','Phone/Internet Bill','Car','Other Utilities']
plt.axis('equal')
plt.pie(exp_vals,labels=exp_labels,radius=2,autopct='%0.1f%%',shadow=True,explode=[0,0.5,0,0.3,0],startangle=20)
# plt.show()
plt.savefig('piechart.jpg',bbox_inches='tight',pad_inches=2,transparent=True,edgecolor='r')
piechart.png image that it generated:
Hope this helps to convert your ~(`)/\/\/\_ [Python] code

- 2,415
- 2
- 22
- 32
You definitely can achieve that with nbconvert using the following command:
jupyter nbconvert --to python while.ipynb
However, having used it personally I would advise against it for several reasons:
- It's one thing to be able to convert to simple Python code and another to have all the right abstractions, classes access and methods set up. If the whole point of you converting your notebook code to Python is getting to a state where your code and notebooks are maintainable for the long run, then nbconvert alone will not suffice. The only way to do that is by manually going through the codebase.
- Notebooks inherently promote writing code which is not maintainable (https://docs.google.com/presentation/d/1n2RlMdmv1p25Xy5thJUhkKGvjtV-dkAIsUXP-AL4ffI/edit#slide=id.g3d7fe085e7_0_21). Using nbconvert on top might just prove to be a bandaid. Specific examples of where it promotes not-so-maintainable code are imports might be sprayed throughout, hard coded paths are not in one simple place to view, class abstractions might not be present, etc.
- nbconvert still mixes execution code and library code.
- Comments are still not present (probably were not in the notebook).
- There is still a lack of unit tests etc.
So to summarize, there is not good way to out of the box convert python notebooks to maintainable, robust python modularized code, the only way is to manually do surgery.

- 407
- 4
- 9
You can use the following script to convert jupyter notebook to Python script, or view the code directly.
To do this, write the following contents into a file cat_ipynb
, then chmod +x cat_ipynb
.
#!/usr/bin/env python
import sys
import json
for file in sys.argv[1:]:
print('# file: %s' % file)
print('# vi: filetype=python')
print('')
code = json.load(open(file))
for cell in code['cells']:
if cell['cell_type'] == 'code':
print('# -------- code --------')
for line in cell['source']:
print(line, end='')
print('\n')
elif cell['cell_type'] == 'markdown':
print('# -------- markdown --------')
for line in cell['source']:
print("#", line, end='')
print('\n')
Then you can use
cat_ipynb your_notebook.ipynb > output.py
Or show it with vi
directly
cat_ipynb your_notebook.ipynb | view -

- 3,791
- 1
- 30
- 40
You can run a .py file in the same directory:
import json
files = ["my_first_file_name.ipynb", "my_second_file_name.ipynb"]
for file in files:
code = json.load(open(file))
py_file = open(f"{file}.py", "w+")
for cell in code['cells']:
if cell['cell_type'] == 'code':
for line in cell['source']:
py_file.write(line)
py_file.write("\n")
elif cell['cell_type'] == 'markdown':
py_file.write("\n")
for line in cell['source']:
if line and line[0] == "#":
py_file.write(line)
py_file.write("\n")
py_file.close()
I rewrite this code from Syrtis Major's answer.

- 29
- 1
-
The best answer available. Does not need `jupyter nbconvert` and just uses the standard json format to get the notebooks. Absolutely Brilliant! – Farhan Hai Khan Oct 13 '21 at 08:38
- Go to https://jupyter.org/
- click on nbviewer
- Enter the location of your file and render it.
- Click on view as code (shown as < />)

- 984
- 3
- 12
- 34
-
-
@JJJ It is detailed at the link. For 3, I, for instance, had the jupyter notebook on a Git repository and just entered the link to the file on git. For 4, after opening your notebook, on top right, you find few icons. The icon with > on it is "view as code" icon. Hope this clarifies. – Blade Apr 07 '19 at 02:27
One way to do that would be to upload your script on Colab and download it in .py format from File -> Download .py

- 1,226
- 8
- 10
Convert the Ipynb dir files to .py
import os
for fname in os.listdir():
if fname.endswith('ipynb'):
os.system(f'jupyter nbconvert {fname} --to python')

- 462
- 5
- 15
-
-
-
-
1This is just the same as the other solution but you're running the bash command from inside python. – emilBeBri Jul 28 '23 at 08:48
-
-
1right, I guess it's good to have different ways of doing it, sorry for being a bit of a dick. – emilBeBri Jul 31 '23 at 19:21
If this is a one-off, follow e.g. @kikocorreoso depending if you want to use command line or gui.
However, if you want some solution that will maintain a synchronized version of the .py and the .ipynb you really should consider using jupytext as also pointed out by @Wayne
Run conda install jupytext
or pip install jupytext
Then do:
jupytext --set-formats ipynb,py <file>.ipynb
To keep it synchronized to the .py file:
jupytext --set-formats ipynb,py <file>.ipynb --sync
This will make sure jupyter keeps the two files in sync when saving from now on...
Last note: If you are a gui person, after running the installation command for jupytext, everything else can be done from the gui as well File-->Jupytext-->pair Notebook with light Script
:

- 12,950
- 7
- 74
- 95
jupyter nbconvert [filename].ipynb --no-prompt --to python
The above code will generate [filename].py in the same directory

- 111
- 3
Copy all the (''.ipynb) files in the Desired folder then execute:
import os
desired_path = 'C:\\Users\\Docs\\Ipynb Covertor'
os.chdir(desired_path)
list_of_directory = os.listdir(desired_path)
for file in list_of_directory:
os.system('ipython nbconvert --to script ' + str(file))

- 53
- 6