Skip to main content

cd2root: Change Working Directory to the Project Root

https://img.shields.io/pypi/v/cd2root.svg

cd2root allows you to elegantly change the working directory of the current file to the project root directory with only 1 line of code. It is useful when you have a project with a deep directory structure and you want to import modules relative to the project root directory.

Getting Started

Install cd2root

pip install cd2root

Usage

The easiest way to use cd2root is to add the following line to the top of your python file:

# normally import packages before custom modules
import ...

############################################################################
# cd2root: change working directory to project root
from cd2root import cd2root
cd2root()
############################################################################

# Then import custom modules that are relative to the project root
from src.utils import ...

If you just want to get the project root directory without changing the working directory

from cd2root import get_project_root

project_root = get_project_root()  # type: pathlib.Path
data_file = project_root / "data" / "data.csv"
...

Documentation

cd2root.cd2root is the grab-and-go function for most use cases. It has the following signature:

def cd2root(
    path_name: str = None,
    dotfile_name: str = None,
    load_dotenv: bool = True,
    use_cwd: bool = False,
    verbose: bool = False,
) -> Path:
    """
    Change working directory to project root directory.

    The rules to find the project root directory:
    1. If path_name is not None, find the directory containing path_name
    2. If dotfile_name is not None, find the directory containing dotfile_name
    3. If PROJECT_ROOT is set in .env, use it
    4. If any of the following files is found, use the directory containing it:
        .idea, .vscode, .editorconfig, .env, pyproject.toml, LICENSE

    :param path_name: the name of the path to find as the project root directory
    :param dotfile_name: the name of the dotfile to find as the project root directory
    :param load_dotenv: whether to load .env file
    :param use_cwd: whether to use current working directory as the starting point
    :param verbose: whether to output verbose messages
    :return: project root directory
    """
    ...

cd2root.get_project_root shares the same signature as cd2root.cd2root except that it does not change the working directory.

def get_project_root(
    path_name: str = None,
    dotfile_name: str = None,
    load_dotenv: bool = True,
    use_cwd: bool = False,
    verbose: bool = False,
) -> Path:
    """
    Get the project root directory. Raise FileNotFoundError if the project root
    directory is not found.

    ...
    """
    ...

There are also other helper functions available with cd2root. cd2root.cd2path change the working directory to given path.

def cd2path(path: Union[Path, str], verbose: bool = False) -> Path:
    """
    Change working directory to path.

    :param path: the path to change working directory to
    :param verbose: whether to output verbose messages
    :return: path
    """
    ...

def find_path(path_name: str, use_cwd: bool = False) -> Path:
    """
    Find the path of the given path_name.

    raise FileNotFoundError if the path is not found.

    :param path_name: the name of the path to find
    :param use_cwd: whether to use current working directory as the starting point
    :return: the path of the given path_name
    """
    ...

History

0.1.0 (2023-10-17)

  • First release on PyPI.

Release files for cd2root 0.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cd2root 0.1.6
File Size Uploaded
cd2root-0.1.6.tar.gz 12.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cd2root 0.1.6
File Interpreter ABI Platform
cd2root-0.1.6-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 18.1 kB

Release files / cd2root-0.1.6.tar.gz

Download URL cd2root-0.1.6.tar.gz
Size 12.4 kB
Tags Source
SHA-256 checksum
How to use checksums
76167b4f70a97d72b3bd6b7a676bd39ec8ffdb0c717f12bb261e460709f8e82f
BLAKE2b-256 checksum
How to use checksums
22f14be79ef6b1f77a2b8d6087910cd83dc5739e6479fc8e5f1f17a269dcfba1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.12

Release files / cd2root-0.1.6-py2.py3-none-any.whl

Download URL cd2root-0.1.6-py2.py3-none-any.whl
Size 5.7 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
6258d48862c453d780c0a39ba6103d87dc722ae7be5bb4cf034f63187604aeff
BLAKE2b-256 checksum
How to use checksums
6d42757dacd6d61293d54ed1ed6d8e01cefe8db7cf023720bda59494dc0053ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.1.6 This release

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page