# snaketrail
Trace the snake 🐍: list **transitive local imports** (files & namespace packages) and report **unused .py files** under your project root — without executing your code.
## Install
```bash
pip install snaketrail
```
lets say you have a Handler.py
thats your main entrypoint to your project,
and you want to see which files it uses.
but you more importantly want to see which files
it DOESNT use and to tell what is deprecated and
just test files.
```
# from your project root
snaketrail Handler.py
snaketrail Handler.py --verbose
snaketrail Handler.py --root /path/to/project
> Unused local Python files:
> - debug.py
> - test.py
```
now you can safely burn those deprecated files
that your main program never touches, or tuck
them away into a deprecated/ folder and nobody will
ever look at them again.
probably.
Raw data
{
"_id": null,
"home_page": null,
"name": "snaketrail",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "dependency-graph, imports, python, static-analysis",
"author": null,
"author_email": "Jacques Fleischer <j.fleischer@ufl.edu>",
"download_url": "https://files.pythonhosted.org/packages/d7/b9/c3700e98714116e51918b12d43564aee8d779cef5c902d3cd4217761660a/snaketrail-0.1.0.tar.gz",
"platform": null,
"description": "# snaketrail\n\nTrace the snake \ud83d\udc0d: list **transitive local imports** (files & namespace packages) and report **unused .py files** under your project root \u2014 without executing your code.\n\n## Install\n```bash\npip install snaketrail\n```\n\nlets say you have a Handler.py\nthats your main entrypoint to your project,\nand you want to see which files it uses.\nbut you more importantly want to see which files\nit DOESNT use and to tell what is deprecated and \njust test files.\n\n```\n# from your project root\nsnaketrail Handler.py\nsnaketrail Handler.py --verbose\nsnaketrail Handler.py --root /path/to/project\n\n> Unused local Python files:\n> - debug.py\n> - test.py\n\n```\n\nnow you can safely burn those deprecated files\nthat your main program never touches, or tuck\nthem away into a deprecated/ folder and nobody will\never look at them again.\n\nprobably.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Trace the snake: list transitive local imports and unused Python files.",
"version": "0.1.0",
"project_urls": null,
"split_keywords": [
"dependency-graph",
" imports",
" python",
" static-analysis"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "7e0d7f014759a7d3976cfa97a16443a477251980c93220c8952d54488e5f75ad",
"md5": "f807943027dd7496ff815a98029d9159",
"sha256": "b59b567d8e4f39cb56b4dab5aa4e5719ed19616b1ab9ce8c807121af96d1c6f8"
},
"downloads": -1,
"filename": "snaketrail-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f807943027dd7496ff815a98029d9159",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 5137,
"upload_time": "2025-08-29T04:37:52",
"upload_time_iso_8601": "2025-08-29T04:37:52.634939Z",
"url": "https://files.pythonhosted.org/packages/7e/0d/7f014759a7d3976cfa97a16443a477251980c93220c8952d54488e5f75ad/snaketrail-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d7b9c3700e98714116e51918b12d43564aee8d779cef5c902d3cd4217761660a",
"md5": "75cf4a6be14d9226a92031d2178915eb",
"sha256": "6a2931d24412d823dd53124e01ea2b8534d29b41ef6adad1979a77cbc8881e12"
},
"downloads": -1,
"filename": "snaketrail-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "75cf4a6be14d9226a92031d2178915eb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 4122,
"upload_time": "2025-08-29T04:37:53",
"upload_time_iso_8601": "2025-08-29T04:37:53.561922Z",
"url": "https://files.pythonhosted.org/packages/d7/b9/c3700e98714116e51918b12d43564aee8d779cef5c902d3cd4217761660a/snaketrail-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-29 04:37:53",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "snaketrail"
}