How to obtain Jupyter Notebook's path?

Viewed 62085

Is there a function to obtain a Notebook's path?

I've Googled a little on the subject but didn't find a simple way to do it... I want to obtain the Notebook's path so I can then use it elsewhere. This way I could save/use files in the same path as the notebook without worrying about where it got saved.

Right now my solution is to put the following code on top but obviously this poses at least the problem of manually having to execute a cell and also if the working directory changes this will stop working.

import os
current_path = os.getcwd()
7 Answers

TLDR: You can't

It is not possible to consistently get the path of a Jupyter notebook. See ipython issue #10123 for more information. I'll quote Carreau:

Here are some reasons why the kernel (in this case IPython):

  • may not be running from single file
  • even if one file, the file may not be a notebook.
  • even if notebook, the notebook may not be on a filesystem.
  • even if on a file system, it may not be on the same machine.
  • even if on the same machine the path to the file may not make sens in the IPython context.
  • even if it make sens the Jupyter Protocol has not been designed to do so. And we have no plan to change this abstraction in short or long term.

Your hack works in most cases and is not too bad depending on the situation.

if you can open it you can use this function

1-open your Jupyter notebook 2- write this function 3-it will print out the path

pwd

if not navigate to your python installation folder open folder scripts and there you will find it.

hope this may help others

use this in cell

%%javascript
IPython.notebook.kernel.execute('nb_name = "' + IPython.notebook.notebook_name + '"')
print(nb_name)

I have a bit of a work around to solve this issue but I find that it is often helpful to have for non-notebook projects as well. In the same folder as your notebook create a file called "base_fns.py". Inside this file place the following code:

import os

def get_local_folder():
    return os.path.dirname(os.path.realpath(__file__))

Then, you can get the path to the folder containing base_fns using:

from base_fns import get_local_folder()
rt_fldr = get_local_folder()
print(rt_fldr)

A few notes:

  1. This gives you the absolute path to the folder containing "base_fns.py", not your notebook. If your notebook and base_fns are in the same folder, then the absolute path to the folder for your notebook and base_fns will be the same.
  2. If you place base_fns in a different folder, you will need to know the relative path to navigate from the base_fns folder to your notebook folder.
  3. If you are working on a larger project with a folder structure, you can place base_fns.py in a known folder and then navigate around to find any other folders/files that you may require.

I know this is an old post, but it seems the path to the notebook can be found using os.path.abspath("mynotebook.ipynb")

It's hardcoding the name of the notebook, but that should be relatively easy to keep in sync.

You can right clic in the Jupyter notebook shortcut icon (in my case under Anaconda3 folder) and go to properties. There you will find the full path to Jupyter: D:\anaconda3\python.exe d:\anaconda3\cwp.py d:\anaconda3 d:\anaconda3\python.exe d:\anaconda3\Scripts\jupyter-notebook-script.py "%USERPROFILE%/"

Properties of Jupyter shortcut:

image

Related