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-hackuv 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb55e9e4a367e413b2daba320a270602a39b604a687254c15cab57b298829ce1
|
|
| MD5 |
e8850c9c76d2359fff7504f19f961ef8
|
|
| BLAKE2b-256 |
3b15c7eb28435a870bfc0b2f617eb5e0e012c321f291f02d5644a3e158bfa4ee
|
File details
Details for the file syspath_hack-0.3.0-py3-none-any.whl.
File metadata
- Download URL: syspath_hack-0.3.0-py3-none-any.whl
- Upload date:
- Size: 6.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84b0e4d72c1a4c231cc29e48a2b5719d3530cc195295f148c87c6c00993137ca
|
|
| MD5 |
9f5bcd6142ba6fdce405174dce505357
|
|
| BLAKE2b-256 |
454faef9bce06f40e1d0fb7f3fd74474b96f2318591435ab06fb8cedd8152125
|