Skip to main content

Simple package for easy project root setup

Project description

pyrootutils

Python Tests Codecov Build Issues License Release PyPi

A simple python package to solve all your problems with pythonpath, working directory, file paths, module imports and environment variables.

Why pyrootutils?

Problem: I would like to be able to:

  • Run my python scripts from anywhere
  • Always import python modules relatively to the project root directory
  • Always access files relatively to the project root so I don't have to specify a series of ../ to get to the data
  • Always have access to environment variables from .env file without having to load them manually
  • Have all the above benefits in notebooks even if they're nested in subdirectories

Solution: The pyrootutils package provides a flexible way to setup the python project with a simple one-liner. It finds the project root based on the location of specified file name, e.g. .project-root or .git.

The package is tiny and continuosly maintained, so you can use it without worrying it gets deprecated in the future.

Setup

pip install pyrootutils

Usage

import pyrootutils


# find absolute root path (searches for directory containing .project-root file)
# search starts from current file and recursively goes over parent directories
# returns pathlib object
path = pyrootutils.find_root(search_from=__file__, indicator=".project-root")

# find absolute root path (searches for directory containing any of the files on the list)
path = pyrootutils.find_root(search_from=__file__, indicator=[".git", "setup.cfg"])

# take advantage of the pathlib syntax
data_dir = path / "data"
assert data_dir.exists(), f"path doesn't exist: {data_dir}"

# set root directory
pyrootutils.set_root(
    path=path # path to the root directory
    project_root_env_var=True, # set the PROJECT_ROOT environment variable to root directory
    dotenv=True, # load environment variables from .env if exists in root directory
    pythonpath=True, # add root directory to the PYTHONPATH (helps with imports)
    cwd=True, # change current working directory to the root directory (helps with filepaths)
)
import pyrootutils


# combines find_root() and set_root() into one method
root = pyrootutils.setup_root(
    search_from=__file__,
    indicator="pyproject.toml"
    project_root_env_var=True,
    dotenv=True,
    pythonpath=True,
    cwd=True,
)

Inspirations

This package is heavily inspired by:

https://github.com/chendaniely/pyprojroot

https://github.com/pashminacameron/py-repo-root

https://github.com/EduardKononov/from-root

https://github.com/eddieantonio/project-paths

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyrootutils-1.0.4.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

pyrootutils-1.0.4-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file pyrootutils-1.0.4.tar.gz.

File metadata

  • Download URL: pyrootutils-1.0.4.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for pyrootutils-1.0.4.tar.gz
Algorithm Hash digest
SHA256 f58aac67147bbab20938b7b783cb2f4670d6329a33c6640233854976538fc5f2
MD5 7231031223e7a8dbac9c09d4ea620f9b
BLAKE2b-256 377dc5f3fb44dc98a72249a17a49e28bce4aaa6758ce9e37e77648cdc1857baf

See more details on using hashes here.

File details

Details for the file pyrootutils-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: pyrootutils-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 5.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for pyrootutils-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8bbf25425278693168ae03b167aa6509422dc21853a6ee01d5d5e40601a89f90
MD5 bf5ceccdbc50556d9f8ddfcb5ac5c59a
BLAKE2b-256 1c6fed601aec632d908b86adbad0e1cc712f7073faf697134fb0465a3fbcc512

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page