Skip to main content

Utilities for locating project roots and keeping sys.path tidy

Project description

syspath-hack

syspath-hack provides small helpers for keeping sys.path predictable in scripts, notebooks, and tests. It resolves entries before adding them, avoids duplicates, and can locate your project root with a marker file such as pyproject.toml.

Installation

Install from PyPI with your preferred tool:

  • pip install syspath-hack
  • uv add syspath-hack

Quick start

Add the project root to sys.path so local imports work during ad-hoc scripts or notebooks:

from syspath_hack import add_project_root

add_project_root()  # finds the nearest pyproject.toml above the cwd

Prefer prepend_project_root() when you need imports to prioritise the working tree over installed copies of the package.

Both project-root helpers accept extra_paths for common subdirectories. For example, to prioritise the project and its src tree:

from syspath_hack import prepend_project_root

prepend_project_root(extra_paths=["src"])

Working in a GitHub Action? Use append_action_root() or prepend_action_root() to locate action.yml and automatically include scripts and src when they exist.

Working with temporary paths

When you need to add a directory only briefly, use temp_syspath to mutate sys.path inside a context manager and restore it afterwards:

from syspath_hack import SysPathMode, temp_syspath

with temp_syspath(["plugins"], mode=SysPathMode.PREPEND):
    import plugin_loader  # noqa: F401

For module-local imports, ensure_module_dir(__file__) adds the current file's directory to sys.path in one call, replacing the boilerplate Path(__file__).resolve().parent pattern.

Custom project markers

You can search for a different marker file and handle failures explicitly:

from syspath_hack import ProjectRootNotFoundError, find_project_root

try:
    repo_root = find_project_root("poetry.lock")
except ProjectRootNotFoundError as err:
    raise SystemExit(f"Could not locate the repository: {err}") from err
else:
    print(repo_root)

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

syspath_hack-0.3.0.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

syspath_hack-0.3.0-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file syspath_hack-0.3.0.tar.gz.

File metadata

  • Download URL: syspath_hack-0.3.0.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.11

File hashes

Hashes for syspath_hack-0.3.0.tar.gz
Algorithm Hash digest
SHA256 bb55e9e4a367e413b2daba320a270602a39b604a687254c15cab57b298829ce1
MD5 e8850c9c76d2359fff7504f19f961ef8
BLAKE2b-256 3b15c7eb28435a870bfc0b2f617eb5e0e012c321f291f02d5644a3e158bfa4ee

See more details on using hashes here.

File details

Details for the file syspath_hack-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for syspath_hack-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 84b0e4d72c1a4c231cc29e48a2b5719d3530cc195295f148c87c6c00993137ca
MD5 9f5bcd6142ba6fdce405174dce505357
BLAKE2b-256 454faef9bce06f40e1d0fb7f3fd74474b96f2318591435ab06fb8cedd8152125

See more details on using hashes here.

Supported by

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