How to obtain Jupyter Notebook's path?

Question:

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()
Asked By: loco.loop

||

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.

Answered By: Jonas Adler

use this in cell

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

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

Answered By: MoShamroukh

You can just use "pwd" which stands for print working directory.
enter image description here

Answered By: Milin

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:anaconda3python.exe d:anaconda3cwp.py d:anaconda3 d:anaconda3python.exe d:anaconda3Scriptsjupyter-notebook-script.py "%USERPROFILE%/"

Properties of Jupyter shortcut:

image

Answered By: Andres

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.

Answered By: EddieM

Update:

I found this answer which solves the problem. The following command returns the folder path for both *.py and *.ipynb files.

import os
os.path.abspath("")

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.
Answered By: Braden Wiens

What I am doing is not really beautifull but quite efficient. On VScode, I right click "Copy Path" on a sub folder in my working folder, in which I have my multiples Jupyter Notebook. I remove the end of the string and I obtain the aboslute path to the folder

I after use in one of my jupyter notebook the command:
os.chdir(r"path_to_your_folder") and this is it.

NB: Since I work collaborately on repo cointaining Jupyter notebooks, this is the only ugly but efficient solution that I found.

Answered By: Roms

In VSCode Jupyter, You can try this in a cell:

import IPython
notebook_name = "/".join(
        IPython.extract_module_locals()[1]["__vsc_ipynb_file__"].split("/")[-5:]
    )
print(notebook_name)
Answered By: mallet
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.