2022-02-22    Share on: Twitter | Facebook | HackerNews | Reddit

Adding Parent Directory to Python Path

There may be times when you want to import modules from a parent directory in Python. This can be useful, for example, when working with Jupyter notebooks and you want to keep your code organized in a specific directory structure. In this article, we will explore different ways to add a parent directory to the Python path so that you can import modules from it.

Method 1: Using sys.path.insert()

One way to add a parent directory to the Python path is to use the sys.path.insert() method. This method allows you to insert a new path at a specific index in the sys.path list. To add a parent directory to the Python path, you can use the following code:

import sys
sys.path.insert(0, '..')

This code imports the sys module and then uses the insert() method to add the parent directory (indicated by '..') to the beginning of the sys.path list. This means that the parent directory will be searched before any other paths in the list when importing modules.

Method 2: Using sys.path.append()

Another way to add a parent directory to the python path is to use the sys.path.append() method, which will add the given path to the end of the sys.path list.

import sys
sys.path.append('..')

This method would work in the same way as above method but the order of search of the path will be different.

Method 3: Using PYTHONPATH environment variable

You can also add a parent directory to the Python path by setting the PYTHONPATH environment variable.

export PYTHONPATH="$PYTHONPATH:/path/to/parent/directory"

This way the parent directory will be added to the python path for the current terminal session. To make the change permanent, you can add the above line to your shell startup file, such as ~/.bashrc or ~/.bash_profile

Method 4: Using .pth file

Another way to add parent directory to the python path is to create a .pth file in python's site-packages directory.

echo '..' > /usr/local/lib/python3.8/site-packages/my_project.pth`

This will add the parent directory as a permanent path to python's sys.path list.

from Python documentation: - a path configuration file is a file whose name has the form name.pth  - its contents are additional items (one per line) to be added to sys.path. - blank lines and lines beginning with # are skipped. - lines starting with import (followed by space or tab) are executed.

See the official Python documentation: site — Site-specific configuration hook — Python 3.12.3 documentation

Using Pathlib

There is a way to add a parent directory to the Python path using the pathlib module with method 1 or method 2 explained above. pathlib is a built-in Python module that provides an object-oriented interface for working with file paths.

One way to add a parent directory to the Python path using pathlib is to use the parent attribute of a Path object. This attribute returns a new Path object representing the parent directory of the original Path object. For example, you can use the following code to add a parent directory to the Python path:

from pathlib import Path import sys 

sys.path.append(str(Path(__file__).resolve().parent.parent))

This code imports the Path class from the pathlib module, and then uses the __file__ special variable to get the current file's path. It uses the resolve() method to get the absolute path of the current file and then uses the parent attribute to get the parent directory of the current file and again parent directory of the parent directory of current file. This new Path object is then passed to the append() method of the sys.path list to add the parent directory to the Python path.

Another way to use pathlib is to use pathlib.Path().joinpath() to add the parent directory to the python path.

from pathlib import Path
import sys 

path = Path().joinpath().joinpath('..')
sys.path.append(str(path))

This way you can join multiple directories using the joinpath method.

It's important to note that this method uses the str() function to convert the Path object to a string, as the sys.path list only accepts strings.

Conclusion

In this article, we have covered different ways to add a parent directory to the Python path, which can be useful when working with Jupyter notebooks or other projects that require a specific directory structure.

CAUTION: Keep in mind that adding the parent directory to the python path will make the modules inside it available for import, but it also makes the entire directory structure available for import, so it's important to have a clear and organized directory structure.

Edits:

  • 2024-05-29: Added more explanations on using .pth file