Canonical Structure (+1)
Canonical Structure
repo/
src/
<package_name>/ ← installed package root (snake_case)
__init__.py ← required at every level
common/ ← cross-cutting utilities
modules/ ← domain feature modules
<domain>/
__init__.py
core.py ← main logic
utils.py ← helpers
cli/ ← command-line entrypoints (if any)
tests/
<domain>/ ← mirrors src/<package>/<domain>/
unit/
integration/
fixtures/
docs/
config/
scripts/
data/
reports/ ← gitignored (generated)
pyproject.toml ← required at repo root
pytest.ini ← required; must include pythonpath = src
Rules
- One package per
src/—src/contains exactlysrc/<package_name>/. No other Python packages atsrc/other_package/level. __init__.pyrequired at every directory that is a Python package.pythonpath = srcinpytest.ini— never rely on PYTHONPATH env variable for CI.- Tests mirror src —
tests/<domain>/maps tosrc/<package>/<domain>/. Do NOT usetests/modules/<domain>/wrapper — themodules/level is redundant. - No loose scripts at root — ad-hoc
.pyfiles at repo root belong inscripts/orsrc/<package>/cli/orsrc/<package>/tools/.