In this tutorial, you'll learn how to use and write with different markup tags using Jupyter Notebook. Working with Jupyter Notebooks in Visual Studio Code.
I have an image (.png) saved on my GitHub account, and I want to show it in a Jupyter notebook markdown cell. Use this tutorial to learn how to create your first Jupyter Notebook, important terminology, and how easily notebooks can be shared and published online. I can paste/drag&drop images into a jupyter notebook markdown cell.They will appear as follows:!image.png(attachment:image.png)The image is displayed correctly (but to large).I am however.
Jupyter (formerly IPython Notebook) is an open-source project that lets you easily combine Markdown text and executable Python source code on one canvas called a notebook. Visual Studio Code supports working with Jupyter Notebooks natively, as well as through Python code files. This topic covers the native support available for Jupyter Notebooks and demonstrates how to:
- Create, open, and save Jupyter Notebooks
- Work with Jupyter code cells
- View, inspect, and filter variables using the Variable explorer and Data viewer
- Connect to a remote Jupyter server
- Debug a Jupyter notebook
Setting up your environment
Omnikey card reader driver download for windows. To work with Jupyter notebooks, you must activate an Anaconda environment in VS Code, or another Python environment in which you've installed the Jupyter package. To select an environment, use the Python: Select Interpreter command from the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)).
Once the appropriate environment is activated, you can create and open a Jupyter Notebook, connect to a remote Jupyter server for running code cells, and export a Jupyter Notebook as a Python file.
Note: By default, the Visual Studio Code Python extension will open a Jupyter Notebook (.ipynb) in the Notebook Editor. If you want to disable this behavior you can turn it off in settings. (Python > Data Science: Use Notebook Editor).
Create or open a Jupyter Notebook
You can create a Jupyter Notebook by running the Jupyter: Create Blank New Jupyter Notebook command from the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) or by creating a new .ipynb file in your workspace. When you select the file, the Notebook Editor is launched allowing you to edit and run code cells.
If you have an existing Jupyter Notebook, you can open it in the Notebook Editor by double-clicking on the file and opening with Visual Studio Code, through the Visual Studio Code, or using the Command Palette Jupyter: Open in Notebook Editor command.
Once you have a Notebook created, you can run a code cell using the green run icon above the cell and the output will appear directly below the code cell.
Trusted Notebooks
It's possible for malicious source code to be contained in a Jupyter Notebook. With that in mind, to help protect you, any Notebook that's not created with VS Code on your local machine (or explicitly set to Trusted by you) is considered Not Trusted. When a Notebook is Not Trusted, VS Code will not render Markdown cells or display the output of code cells within the Notebook. Instead, just the source of Markdown and code cells will be shown. The Notebook is essentially in read-only mode, with toolbars disabled and no ability to edit the file, until you set it as Trusted.
Note: Before setting a Notebook as Trusted, it is up to you to verify that the source code and Markdown are safe to run. VS Code does not perform any sanitizing of Markdown, it merely prevents it from being rendered until a Notebook is marked as Trusted to help protect you from malicious code.
When you first open a Notebook that's Not Trusted, the following notification prompt is displayed.
If you select Trust, the Notebook will be trusted going forward. If you opt not to trust the Notebook, then Not Trusted will be displayed in the toolbar and the Notebook will remain in a read-only state as described previously. If you select Trust all notebooks, you will be taken to settings, where you can specify that all Notebooks opened in VS Code be trusted. That means you will no longer be prompted to trust individual notebooks and harmful code could automatically run.
You can relaunch the trust notification prompt after reviewing the Notebook by clicking on the Not Trusted status.
Save your Jupyter Notebook
You can save your Jupyter Notebook using the keyboard combo Ctrl+S or through the save icon on the Notebook Editor toolbar.
Note: At present, you must use the methods discussed above to save your Notebook. The File>Save menu does not save your Notebook, just the toolbar icon or keyboard command.
Export your Jupyter Notebook
You can export a Jupyter Notebook as a Python file (.py), a PDF, or an HTML file. To export, just click the convert icon on the main toolbar. You'll then be presented with file options from the Command Palette.
Note: For PDF export, you must have TeX installed. If you don't, you will be notified that you need to install it when you select the PDF option. Also, be aware that if you have SVG-only output in your Notebook, they will not be displayed in the PDF. To have SVG graphics in a PDF, either ensure that your output includes a non-SVG image format or else you can first export to HTML and then save as PDF using your browser.
Work with code cells in the Notebook Editor
The Notebook Editor makes it easy to create, edit, and run code cells within your Jupyter Notebook.
Create a code cell
By default, a blank Notebook will have an empty code cell for you to start with and an existing Notebook will place one at the bottom. Add your code to the empty code cell to get started.
Code cell modes
While working with code cells a cell can be in three states, unselected, command mode, and edit mode. The current state of a cell is indicated by a vertical bar to the left of a code cell. When no bar is visible, the cell is unselected.
An unselected cell isn't editable, but you can hover over it to reveal additional cell specific toolbar options. These additional toolbar options appear directly below and to the left of the cell. You'll also see when hovering over a cell that an empty vertical bar is present to the left.
When a cell is selected, it can be in two different modes. It can be in command mode or in edit mode. When the cell is in command mode, it can be operated on and accept keyboard commands. When the cell is in edit mode, the cell's contents (code or Markdown) can be modified.
When a cell is in command mode, the vertical bar to the left of the cell will be solid to indicate it's selected.
When you're in edit mode, the vertical bar will have diagonal lines.
To move from edit mode to command mode, press the ESC key. To move from command mode to edit mode, press the Enter key. You can also use the mouse to change the mode by clicking the vertical bar to the left of the cell or out of the code/Markdown region in the code cell.
Add additional code cells
Code cells can be added to a Notebook using the main toolbar, a code cell's vertical toolbar, the add code cell icon at the bottom of the Notebook, the add code cell icon at the top of the Notebook (visible with hover), and through keyboard commands.
Using the plus icon in the main toolbar will add a new cell directly below the currently selected cell. Using the add cell icons at the top and bottom of the Jupyter Notebook, will add a code cell at the top and bottom respectively. And using the add icon in the code cell's toolbar, will add a new code cell directly below it.
When a code cell is in command mode, the A key can be used to add a cell above and the B can be used to add a cell below the selected cell. Germany driver download.
Select a code cell
The selected code cell can be changed using the mouse, the up/down arrow keys on the keyboard, and the J (down) and K (up) keys. To use the keyboard, the cell must be in command mode.
Run a single code cell
Once your code is added, you can run a cell using the green run arrow and the output will be displayed below the code cell.
You can also use key combos to run a selected code cell.
- Ctrl+Enter runs the currently selected cell
- Shift+Enter runs the currently selected cell and, if a cell is not already present, inserts a new cell immediately below (focus moves to the below cell in command mode)
- Alt+Enter runs the currently selected cell and inserts a new cell immediately below (focus moves to new cell in edit mode).
These keyboard combos can be used in both command and edit modes.
Run multiple code cells
Running multiple code cells can be accomplished in a number of ways. You can use the double arrow in the toolbar of the Notebook Editor to run all cells within the Notebook or the run icons with directional arrows to run all cells above or below the current code cell.
Run code by line
To help diagnose issues with your Notebook code, run-by-line lets you step through the code of a cell in a line-by-line fashion. While stepping through code you can view the state of variables at each step via the variable explorer or hover your mouse over variables to see data tips.
To start a session, just click the run-by-line icon to the right of the run cell icon on the cell's toolbar.
Once in a run-by-line session, you can run the currently highlighted line of code by pressing the icon again. To exit, just click the stop button next to the run-by-line icon in the cell.
Move a code cell
Moving code cells up or down within a Notebook can be accomplished using the vertical arrows beside each code cell. Hover over the code cell and then click the up arrow to move the cell up and the down arrow to move the cell down.
Delete a code cell
Deleting a code cell can be accomplished by hovering over a code cell and using the delete icon in the code cell toolbar or through the keyboard combo dd when the selected code cell is in command mode.
Undo your last change
You can use the z key to undo your previous change, for example, if you've made an accidental edit you can undo it to the previous correct state, or if you've deleted a cell accidentally you can recover it.
Switch between code and Markdown
The Notebook Editor allows you to easily change code cells between Markdown and code. By default a code cell is set for code, but just click the Markdown icon (or the code icon, if Markdown was previously set) in the code cell's toolbar to change it.
Once Markdown is set, you can enter Markdown formatted content to the code cell. Once you select another cell or toggle out of the content selection, the Markdown content is rendered in the Notebook Editor.
You can also use the keyboard to change the cell type. When a cell is selected and in command mode, the M key switches the cell type to Markdown and the Y key switches the cell type to code.
Clear output or restart/interrupt the kernel
If you'd like to clear the code cell output or restart/interrupt the kernel, you can accomplish that using the main Notebook Editor toolbar.
Enable/Disable line numbers
You can enable or disable line numbering within a code cell using the L key.
IntelliSense support in the Jupyter Notebook Editor
The Python Jupyter Notebook Editor window has full IntelliSense – code completions, member lists, quick info for methods, and parameter hints. You can be just as productive typing in the Notebook Editor window as you are in the code editor.
Variable explorer and data viewer
Within the Python Notebook Editor, it's possible to view, inspect, and filter the variables within your current Jupyter session. By clicking the Variables icon in the top toolbar after running code and cells, you'll see a list of the current variables, which will automatically update as variables are used in code.
For additional information about your variables, you can also double-click on a row or use the Show variable in data viewer button next to the variable to see a more detailed view of a variable in the Data Viewer. Once open, you can filter the values by searching over the rows.
Note: Variable explorer is enabled by default, but can be turned off in settings (Python > Data Science: Show Jupyter Variable Explorer).
Plot viewer
The Plot Viewer gives you the ability to work more deeply with your plots. In the viewer you can pan, zoom, and navigate plots in the current session. You can also export plots to PDF, SVG, and PNG formats.
Within the Notebook Editor window, double-click any plot to open it in the viewer, or select the plot viewer button on the upper left corner of the plot (visible on hover).
Note: There is support for rendering plots created with matplotlib and Altair.
Debug a Jupyter Notebook
If you need additional debug support in order to diagnose an issue in your code cells, you can export it as a Python file. Once exported as a Python file, the Visual Studio Code debugger lets you step through your code, set breakpoints, examine state, and analyze problems. Using the debugger is a helpful way to find and correct issues in notebook code. To debug your Python file:
In VS Code, if you haven't already, activate a Python environment in which Jupyter is installed.
From your Jupyter Notebook (.ipynb) select the convert button in the main toolbar.
Once exported, you'll have a .py file with your code that you can use for debugging.
After saving the .py file, to start the debugger, use one of the following options:
- For the whole Notebook, open the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) and run the Jupyter: Debug Current File in Python Interactive Window command.
- For an individual cell, use the Debug Cell adornment that appears above the cell. The debugger specifically starts on the code in that cell. By default, Debug Cell just steps into user code. If you want to step into non-user code, you need to uncheck Data Science: Debug Just My Code in the Python extension settings (⌘, (Windows, Linux Ctrl+,)).
To familiarize yourself with the general debugging features of VS Code, such as inspecting variables, setting breakpoints, and other activities, review VS Code debugging.
As you find issues, stop the debugger, correct your code, save the file, and start the debugger again.
When you're satisfied that all your code is correct, use the Python Interactive window to export the Python file as a Jupyter Notebook (.ipynb).
Connect to a remote Jupyter server
You can offload intensive computation in a Jupyter Notebook to other computers by connecting to a remote Jupyter server. Once connected, code cells run on the remote server rather than the local computer.
To connect to a remote Jupyter server:
Run the Jupyter: Specify local or remote Jupyter server for connections command from the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)). Sierra wireless multifunction devices driver.
When prompted to Pick how to connect to Jupyter, select Existing: Specify the URI of an existing server.
When prompted to Enter the URI of a Jupyter server, provide the server's URI (hostname) with the authentication token included with a
?token=
URL parameter. (If you start the server in the VS Code terminal with an authentication token enabled, the URL with the token typically appears in the terminal output from where you can copy it.) Alternatively, you can specify a username and password after providing the URI.
Note: For added security, Microsoft recommends configuring your Jupyter server with security precautions such as SSL and token support. This helps ensure that requests sent to the Jupyter server are authenticated and connections to the remoter server are encrypted. For guidance about securing a notebook server, see the Jupyter docs.
You've always wanted to
- edit Jupyter notebooks as e.g. plain Python scripts in your favorite editor?
- do version control of Jupyter notebooks with clear and meaningful diffs?
- collaborate on Jupyter notebooks using standard (text oriented) merge tools?
Jupytext can convert notebooks to and from
- Julia, Python and R scripts (extensions
.jl
,.py
and.R
), - Markdown documents (extension
.md
), - R Markdown documents (extension
.Rmd
).
Jupytext is available from within Jupyter. You can work as usual on your notebook in Jupyter, and save and read it in the formats you choose. The text representations can be edited outside of Jupyter (see our demo below). When the notebook is refreshed in Jupyter, cell inputs are loaded from the script or Markdown document and kernel variables are preserved. Cell outputs are taken from the original Jupyter notebook if you use paired notebooks, which we recommend.
Format | Extension | Text editor | Git friendly | Preserve outputs |
---|---|---|---|---|
Jupyter notebook | .ipynb | ✔ | ||
Script or Markdown | .jl /.py /.R /.md /.Rmd | ✔ | ✔ | |
Paired notebook | (.jl /.py /.R /.md /.Rmd ) + .ipynb | ✔ | ✔ | ✔ |
Example usage
Writing notebooks as plain text
You like to work with scripts? The good news is that plain scripts, which you can draft and test in your favorite IDE, open naturally as notebooks in Jupyter when using Jupytext. Run the notebook in Jupyter to generate the outputs, associate an .ipynb
representation, save and share your research!
Code refactoring
In the animation below we propose a quick demo of Jupytext. While the example remains simple, it shows how your favorite text editor or IDE can be used to edit your Jupyter notebooks. IDEs are more convenient than Jupyter for navigating through code, editing and executing cells or fractions of cells, and debugging.
- We start with a Jupyter notebook.
- The notebook includes a plot of the world population. The plot legend is not in order of decreasing population, we'll fix this.
- We want the notebook to be saved as both a
.ipynb
and a.py
file: we add ajupytext_formats
entry to the notebook metadata. - The Python script can be opened with PyCharm:
- Navigating in the code and documentation is easier than in Jupyter.
- The console is convenient for quick tests. We don't need to create cells for this.
- We find out that the columns of the data frame were not in the correct order. We update the corresponding cell, and get the correct plot.
- The Jupyter notebook is refreshed in the browser. Modified inputs are loaded from the Python script. Outputs and variables are preserved. We finally rerun the code and get the correct plot.
Installation
Install Jupytext with
Then, configure Jupyter to use Jupytext:
- generate a Jupyter config, if you don't have one yet, with
jupyter notebook --generate-config
- edit
.jupyter/jupyter_notebook_config.py
and append the following:
Paired notebooks
The idea of paired notebooks is to store a .ipynb
file alongside the text-only version. This lets us get the best of both worlds: a text-only document to put under version control, and an easily sharable notebook which stores the outputs.
To enable paired notebooks, add a jupytext_formats
entry to the notebook metadata with Edit/Edit Notebook Metadata in Jupyter's menu:
When you save the notebook, both the Jupyter notebook and the python scripts are updated. You can edit the text version and then get the updated version in Jupyter by refreshing your browser (deactivate Jupyter's autosave by running %autosave 0
in a cell).
Accepted formats are: ipynb
, md
, Rmd
, py
and R
. In case you want multiple text extensions, please note that the order matters: the first non-ipynb
extension is the one used as the reference source for notebook inputs when you open the ipynb
file.
Finally, it is also possible to pair every notebook with a text representation. If you add
to your Jupyter configuration file, then every Jupyter notebook that you save will have a companion .py
(.nb.py
, .md
, or .Rmd
) notebook. And every .py
(.nb.py
, .md
, or .Rmd
) notebook will have a companion .ipynb
notebook.
Command line conversion
The package provides a jupytext
script for command line conversion between the various notebook extensions:
Round-trip conversion
Round-trip conversion is safe! A few hundred tests help guarantee this.
- Script to Jupyter notebook, to script again is identity. If you associate a Jupyter kernel with your notebook, that information will go to a yaml header at the top of your script.
- Markdown to Jupyter notebook, to Markdown again is identity.
- Jupyter to script, then back to Jupyter again preserves source and metadata.
- Jupyter to Markdown, and Jupyter again preserves source and metadata (cell metadata available only for R Markdown). Note that Markdown cells with two consecutive blank lines will be split into multiple cells (as the two blank line pattern is used to separate cells).
Format specifications
Markdown and R markdown
Our implementation for Jupyter notebooks as Markdown or R Markdown documents is straightforward:
- A YAML header contains the notebook metadata (Jupyter kernel, etc)
- Markdown cells are inserted verbatim, and separated with two blank lines
- Code and raw cells start with triple backticks collated with cell language, and end with triple backticks. Cell metadata are available in the R Markdown format.
R scripts
Implement these specifications:
- Jupyter metadata in YAML format, in a
#'
-escaped header - Markdown cells are commented with
#'
- Code cells are exported verbatim. Cell metadata are signalled with
#+
. Cells end with a blank line, an explicit start of cell marker, or a Markdown comment.
Python and Julia scripts
We wanted to represent Jupyter notebooks with the least explicit markers possible. The rationale for that is to allow arbitrary python files to open as Jupyter notebooks, even files which were never prepared to become a notebook. Precisely:
- Jupyter metadata go to an escaped YAML header
- Markdown cells are commented with
#
, and separated with a blank line - Code cells are exported verbatim (except for Jupyter magics, which are escaped), and separated with blank lines. Code cells are reconstructed from consistent python paragraphs (no function, class or multiline comment will be broken). A start-of-cell delimiter
# +
is used for cells that contain blank lines (outside of functions, classes, etc).# + {}
is used for cells that have explicit metadata (inside the curly bracket, in JSON format). The end of cell delimiter is# -
, and is omitted when followed by another explicit start of cell marker.
Will my notebook really run in an IDE?
Well, that's what we expect. There's however a big difference in the python environments between Python IDEs and Jupyter: in the IDE code is executed with python
and not in a Jupyter kernel. For this reason, jupytext
escapes Jupyter magics found in your notebook. Comment a magic with #noescape
on the same line to avoid escaping. User defined magics can be escaped with #escape
(magics are not escaped in the plain Markdown representation).
Also, you may want some cells to be active only in the Python, or R Markdown representation. For this, use the active
cell metadata. Set 'active': 'ipynb'
if you want that cell to be active only in the Jupyter notebook. And 'active': 'py'
if you want it to be active only in the Python script. And 'active': 'ipynb,py'
if you want it to be active in both, but not in the R Markdown representation..
I like this, how can I contribute?
Your feedback is precious to us: please let us know how we can improve jupytext
. With enough feedback we will be able to transition from the current beta phase to a stable phase. Thanks for staring the project on GitHub. Sharing it is also very helpful! By the way: stay tuned for announcements and demos on medium and twitter!
Roadmap
Planned developments are:
Jupyter Notebook Markdown Cell Tutorial
- Refactor code to allow easier addition of new formats, and document the corresponding procedure #61.
- Implement a language agnostic format compatible with Atom/Hydrogen and VScode/Jupyter #59.
- Cell metadata for markdown cells (currently not covered) #66.