killpy 0.23.0__tar.gz → 0.24.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. {killpy-0.23.0 → killpy-0.24.0}/PKG-INFO +36 -3
  2. {killpy-0.23.0 → killpy-0.24.0}/README.md +35 -2
  3. {killpy-0.23.0 → killpy-0.24.0}/killpy/commands/list.py +76 -30
  4. {killpy-0.23.0 → killpy-0.24.0}/killpy.egg-info/PKG-INFO +36 -3
  5. {killpy-0.23.0 → killpy-0.24.0}/pyproject.toml +1 -1
  6. {killpy-0.23.0 → killpy-0.24.0}/killpy/__init__.py +0 -0
  7. {killpy-0.23.0 → killpy-0.24.0}/killpy/__main__.py +0 -0
  8. {killpy-0.23.0 → killpy-0.24.0}/killpy/cleaner.py +0 -0
  9. {killpy-0.23.0 → killpy-0.24.0}/killpy/cleaners/__init__.py +0 -0
  10. {killpy-0.23.0 → killpy-0.24.0}/killpy/cli.py +0 -0
  11. {killpy-0.23.0 → killpy-0.24.0}/killpy/commands/__init__.py +0 -0
  12. {killpy-0.23.0 → killpy-0.24.0}/killpy/commands/_utils.py +0 -0
  13. {killpy-0.23.0 → killpy-0.24.0}/killpy/commands/clean.py +0 -0
  14. {killpy-0.23.0 → killpy-0.24.0}/killpy/commands/delete.py +0 -0
  15. {killpy-0.23.0 → killpy-0.24.0}/killpy/commands/doctor.py +0 -0
  16. {killpy-0.23.0 → killpy-0.24.0}/killpy/commands/find.py +0 -0
  17. {killpy-0.23.0 → killpy-0.24.0}/killpy/commands/stats.py +0 -0
  18. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/__init__.py +0 -0
  19. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/artifacts.py +0 -0
  20. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/base.py +0 -0
  21. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/cache.py +0 -0
  22. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/conda.py +0 -0
  23. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/hatch.py +0 -0
  24. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/pipenv.py +0 -0
  25. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/pipx.py +0 -0
  26. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/poetry.py +0 -0
  27. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/pyenv.py +0 -0
  28. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/tox.py +0 -0
  29. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/uv.py +0 -0
  30. {killpy-0.23.0 → killpy-0.24.0}/killpy/detectors/venv.py +0 -0
  31. {killpy-0.23.0 → killpy-0.24.0}/killpy/files/__init__.py +0 -0
  32. {killpy-0.23.0 → killpy-0.24.0}/killpy/intelligence/__init__.py +0 -0
  33. {killpy-0.23.0 → killpy-0.24.0}/killpy/intelligence/git_analyzer.py +0 -0
  34. {killpy-0.23.0 → killpy-0.24.0}/killpy/intelligence/scoring.py +0 -0
  35. {killpy-0.23.0 → killpy-0.24.0}/killpy/intelligence/suggestions.py +0 -0
  36. {killpy-0.23.0 → killpy-0.24.0}/killpy/intelligence/tracker.py +0 -0
  37. {killpy-0.23.0 → killpy-0.24.0}/killpy/models.py +0 -0
  38. {killpy-0.23.0 → killpy-0.24.0}/killpy/scanner.py +0 -0
  39. {killpy-0.23.0 → killpy-0.24.0}/killpy.egg-info/SOURCES.txt +0 -0
  40. {killpy-0.23.0 → killpy-0.24.0}/killpy.egg-info/dependency_links.txt +0 -0
  41. {killpy-0.23.0 → killpy-0.24.0}/killpy.egg-info/entry_points.txt +0 -0
  42. {killpy-0.23.0 → killpy-0.24.0}/killpy.egg-info/requires.txt +0 -0
  43. {killpy-0.23.0 → killpy-0.24.0}/killpy.egg-info/top_level.txt +0 -0
  44. {killpy-0.23.0 → killpy-0.24.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: killpy
3
- Version: 0.23.0
3
+ Version: 0.24.0
4
4
  Summary: List all .venv directories and Conda environments 🐍 on your system and check how much space they are using. You can then choose which ones to delete in order to free up space 🧹.
5
5
  Project-URL: Homepage, https://github.com/Tlaloc-Es/killpy
6
6
  Project-URL: Documentation, https://tlaloc-es.github.io/killpy/
@@ -47,6 +47,31 @@ uvx killpy --path ~
47
47
 
48
48
  ______________________________________________________________________
49
49
 
50
+ ## Table of Contents
51
+
52
+ - [The Problem](#the-problem)
53
+ - [What killpy detects](#what-killpy-detects)
54
+ - [Quickstart](#quickstart)
55
+ - [Interactive TUI](#interactive-tui)
56
+ - [Keyboard shortcuts](#keyboard-shortcuts)
57
+ - [Search / filter](#search--filter)
58
+ - [Multi-select mode](#multi-select-mode)
59
+ - [CLI reference](#cli-reference)
60
+ - [`killpy` — launch TUI or headless delete](#killpy--launch-tui-or-headless-delete)
61
+ - [`killpy list` — inspect environments](#killpy-list--inspect-environments)
62
+ - [`killpy delete` — remove environments](#killpy-delete--remove-environments)
63
+ - [`killpy stats` — disk usage summary](#killpy-stats--disk-usage-summary)
64
+ - [`killpy clean` — remove cache directories](#killpy-clean--remove-cache-directories)
65
+ - [`killpy doctor` — smart health report](#killpy-doctor--smart-health-report)
66
+ - [killpy vs alternatives](#killpy-vs-alternatives)
67
+ - [FAQ](#faq)
68
+ - [Pre-commit hooks](#pre-commit-hooks)
69
+ - [Safety](#safety)
70
+ - [Roadmap](#roadmap)
71
+ - [Contributing](#contributing)
72
+
73
+ ______________________________________________________________________
74
+
50
75
  ## The Problem
51
76
 
52
77
  If you have been writing Python for more than a year, your disk is probably full of environments you forgot about.
@@ -227,8 +252,11 @@ killpy list --type venv --type conda # filter by type (repeatable)
227
252
  killpy list --older-than 90 # not accessed in the last 90 days
228
253
  killpy list --json # output as a JSON array
229
254
  killpy list --json-stream # stream as NDJSON — one line per env
255
+ killpy list --quiet # suppress progress output (scripts/CI)
230
256
  ```
231
257
 
258
+ While scanning, `killpy list` shows a live progress indicator on **stderr** so you can see which detector is running. Stdout receives only the final output (table, JSON, or NDJSON), so pipes and redirections are never polluted. Use `--quiet` / `-q` to silence the progress indicator entirely.
259
+
232
260
  `--json` example output:
233
261
 
234
262
  ```json
@@ -430,9 +458,12 @@ Deletes every `.venv` / `pyvenv.cfg` env not accessed in the last 90 days, witho
430
458
  **How do I use killpy in a CI pipeline or script?**
431
459
 
432
460
  ```bash
433
- # List as machine-readable JSON
461
+ # List as machine-readable JSON (progress goes to stderr, JSON to stdout)
434
462
  killpy list --json
435
463
 
464
+ # Suppress progress output entirely with --quiet / -q
465
+ killpy list --json --quiet | jq '.[] | .size_human'
466
+
436
467
  # Stream results as NDJSON in real time
437
468
  killpy list --json-stream | jq '.size_bytes'
438
469
 
@@ -440,6 +471,8 @@ killpy list --json-stream | jq '.size_bytes'
440
471
  killpy --path ./build_artifacts --delete-all --yes
441
472
  ```
442
473
 
474
+ Progress messages always go to **stderr**, so stdout is clean for piping even without `--quiet`. Use `-q` when you want no output at all on stderr.
475
+
443
476
  **How do I skip certain directories?**
444
477
 
445
478
  ```bash
@@ -551,7 +584,7 @@ Typical minimal setup (safe for daily use):
551
584
 
552
585
  ```yaml
553
586
  - repo: https://github.com/Tlaloc-Es/KillPy
554
- rev: 0.23.0
587
+ rev: 0.24.0
555
588
  hooks:
556
589
  - id: killpy
557
590
  ```
@@ -26,6 +26,31 @@ uvx killpy --path ~
26
26
 
27
27
  ______________________________________________________________________
28
28
 
29
+ ## Table of Contents
30
+
31
+ - [The Problem](#the-problem)
32
+ - [What killpy detects](#what-killpy-detects)
33
+ - [Quickstart](#quickstart)
34
+ - [Interactive TUI](#interactive-tui)
35
+ - [Keyboard shortcuts](#keyboard-shortcuts)
36
+ - [Search / filter](#search--filter)
37
+ - [Multi-select mode](#multi-select-mode)
38
+ - [CLI reference](#cli-reference)
39
+ - [`killpy` — launch TUI or headless delete](#killpy--launch-tui-or-headless-delete)
40
+ - [`killpy list` — inspect environments](#killpy-list--inspect-environments)
41
+ - [`killpy delete` — remove environments](#killpy-delete--remove-environments)
42
+ - [`killpy stats` — disk usage summary](#killpy-stats--disk-usage-summary)
43
+ - [`killpy clean` — remove cache directories](#killpy-clean--remove-cache-directories)
44
+ - [`killpy doctor` — smart health report](#killpy-doctor--smart-health-report)
45
+ - [killpy vs alternatives](#killpy-vs-alternatives)
46
+ - [FAQ](#faq)
47
+ - [Pre-commit hooks](#pre-commit-hooks)
48
+ - [Safety](#safety)
49
+ - [Roadmap](#roadmap)
50
+ - [Contributing](#contributing)
51
+
52
+ ______________________________________________________________________
53
+
29
54
  ## The Problem
30
55
 
31
56
  If you have been writing Python for more than a year, your disk is probably full of environments you forgot about.
@@ -206,8 +231,11 @@ killpy list --type venv --type conda # filter by type (repeatable)
206
231
  killpy list --older-than 90 # not accessed in the last 90 days
207
232
  killpy list --json # output as a JSON array
208
233
  killpy list --json-stream # stream as NDJSON — one line per env
234
+ killpy list --quiet # suppress progress output (scripts/CI)
209
235
  ```
210
236
 
237
+ While scanning, `killpy list` shows a live progress indicator on **stderr** so you can see which detector is running. Stdout receives only the final output (table, JSON, or NDJSON), so pipes and redirections are never polluted. Use `--quiet` / `-q` to silence the progress indicator entirely.
238
+
211
239
  `--json` example output:
212
240
 
213
241
  ```json
@@ -409,9 +437,12 @@ Deletes every `.venv` / `pyvenv.cfg` env not accessed in the last 90 days, witho
409
437
  **How do I use killpy in a CI pipeline or script?**
410
438
 
411
439
  ```bash
412
- # List as machine-readable JSON
440
+ # List as machine-readable JSON (progress goes to stderr, JSON to stdout)
413
441
  killpy list --json
414
442
 
443
+ # Suppress progress output entirely with --quiet / -q
444
+ killpy list --json --quiet | jq '.[] | .size_human'
445
+
415
446
  # Stream results as NDJSON in real time
416
447
  killpy list --json-stream | jq '.size_bytes'
417
448
 
@@ -419,6 +450,8 @@ killpy list --json-stream | jq '.size_bytes'
419
450
  killpy --path ./build_artifacts --delete-all --yes
420
451
  ```
421
452
 
453
+ Progress messages always go to **stderr**, so stdout is clean for piping even without `--quiet`. Use `-q` when you want no output at all on stderr.
454
+
422
455
  **How do I skip certain directories?**
423
456
 
424
457
  ```bash
@@ -530,7 +563,7 @@ Typical minimal setup (safe for daily use):
530
563
 
531
564
  ```yaml
532
565
  - repo: https://github.com/Tlaloc-Es/KillPy
533
- rev: 0.23.0
566
+ rev: 0.24.0
534
567
  hooks:
535
568
  - id: killpy
536
569
  ```
@@ -14,6 +14,70 @@ from killpy.files import format_size
14
14
  from killpy.scanner import Scanner
15
15
 
16
16
 
17
+ def _run_json_stream(
18
+ scanner: Scanner,
19
+ path: Path,
20
+ types: tuple[str, ...],
21
+ older_than: int | None,
22
+ quiet: bool,
23
+ stderr_console: Console,
24
+ ) -> None:
25
+ if not quiet:
26
+ stderr_console.print("[dim]Scanning…[/dim]")
27
+
28
+ def _progress(detector, envs):
29
+ if not quiet:
30
+ stderr_console.print(
31
+ f"[dim] {detector.name}[/dim] — [dim]{len(envs)} found[/dim]",
32
+ )
33
+ for env in filter_envs(envs, types or None, older_than):
34
+ click.echo(json.dumps(env.to_dict()))
35
+
36
+ scanner.scan(path, on_progress=_progress)
37
+
38
+
39
+ def _scan_with_progress(
40
+ scanner: Scanner, path: Path, quiet: bool, stderr_console: Console
41
+ ):
42
+ if quiet:
43
+ return scanner.scan(path)
44
+
45
+ status = stderr_console.status("Scanning…", spinner="dots")
46
+ status.start()
47
+
48
+ def _progress(detector, _envs):
49
+ status.update(f"Scanning… [dim]{detector.name}[/dim]")
50
+
51
+ envs = scanner.scan(path, on_progress=_progress)
52
+ status.stop()
53
+ return envs
54
+
55
+
56
+ def _print_table(envs: list, console: Console) -> None:
57
+ table = Table(show_header=True, header_style="bold cyan")
58
+ table.add_column("Type", style="dim", min_width=10)
59
+ table.add_column("Name", min_width=20)
60
+ table.add_column("Last accessed", min_width=12)
61
+ table.add_column("Size", justify="right", min_width=9)
62
+ table.add_column("Path")
63
+
64
+ for env in envs:
65
+ table.add_row(
66
+ env.type,
67
+ env.name,
68
+ env.last_accessed_str,
69
+ env.size_human,
70
+ str(env.path),
71
+ )
72
+
73
+ console.print(table)
74
+ total = sum(e.size_bytes for e in envs)
75
+ console.print(
76
+ f"\n[bold]{len(envs)}[/bold] environment(s) — "
77
+ f"[bold]{format_size(total)}[/bold] total"
78
+ )
79
+
80
+
17
81
  @click.command("list")
18
82
  @click.option(
19
83
  "--path",
@@ -52,26 +116,30 @@ from killpy.scanner import Scanner
52
116
  default=False,
53
117
  help="Output as JSON array.",
54
118
  )
119
+ @click.option(
120
+ "--quiet",
121
+ "-q",
122
+ is_flag=True,
123
+ default=False,
124
+ help="Suppress progress messages (useful in scripts/pipelines).",
125
+ )
55
126
  def list_cmd(
56
127
  path: Path,
57
128
  types: tuple[str, ...],
58
129
  older_than: int | None,
59
130
  as_json: bool,
60
131
  as_json_stream: bool,
132
+ quiet: bool,
61
133
  ) -> None:
62
134
  """List all detected Python environments under PATH."""
63
135
  scanner = Scanner(types=set(types) if types else None)
136
+ stderr_console = Console(stderr=True)
64
137
 
65
138
  if as_json_stream:
66
-
67
- def _stream_progress(_detector, envs):
68
- for env in filter_envs(envs, types or None, older_than):
69
- click.echo(json.dumps(env.to_dict()))
70
-
71
- scanner.scan(path, on_progress=_stream_progress)
139
+ _run_json_stream(scanner, path, types, older_than, quiet, stderr_console)
72
140
  return
73
141
 
74
- envs = scanner.scan(path)
142
+ envs = _scan_with_progress(scanner, path, quiet, stderr_console)
75
143
  envs = filter_envs(envs, types or None, older_than)
76
144
 
77
145
  if as_json:
@@ -82,26 +150,4 @@ def list_cmd(
82
150
  click.echo("No environments found.")
83
151
  return
84
152
 
85
- console = Console()
86
- table = Table(show_header=True, header_style="bold cyan")
87
- table.add_column("Type", style="dim", min_width=10)
88
- table.add_column("Name", min_width=20)
89
- table.add_column("Last accessed", min_width=12)
90
- table.add_column("Size", justify="right", min_width=9)
91
- table.add_column("Path")
92
-
93
- for env in envs:
94
- table.add_row(
95
- env.type,
96
- env.name,
97
- env.last_accessed_str,
98
- env.size_human,
99
- str(env.path),
100
- )
101
-
102
- console.print(table)
103
- total = sum(e.size_bytes for e in envs)
104
- console.print(
105
- f"\n[bold]{len(envs)}[/bold] environment(s) — "
106
- f"[bold]{format_size(total)}[/bold] total"
107
- )
153
+ _print_table(envs, Console())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: killpy
3
- Version: 0.23.0
3
+ Version: 0.24.0
4
4
  Summary: List all .venv directories and Conda environments 🐍 on your system and check how much space they are using. You can then choose which ones to delete in order to free up space 🧹.
5
5
  Project-URL: Homepage, https://github.com/Tlaloc-Es/killpy
6
6
  Project-URL: Documentation, https://tlaloc-es.github.io/killpy/
@@ -47,6 +47,31 @@ uvx killpy --path ~
47
47
 
48
48
  ______________________________________________________________________
49
49
 
50
+ ## Table of Contents
51
+
52
+ - [The Problem](#the-problem)
53
+ - [What killpy detects](#what-killpy-detects)
54
+ - [Quickstart](#quickstart)
55
+ - [Interactive TUI](#interactive-tui)
56
+ - [Keyboard shortcuts](#keyboard-shortcuts)
57
+ - [Search / filter](#search--filter)
58
+ - [Multi-select mode](#multi-select-mode)
59
+ - [CLI reference](#cli-reference)
60
+ - [`killpy` — launch TUI or headless delete](#killpy--launch-tui-or-headless-delete)
61
+ - [`killpy list` — inspect environments](#killpy-list--inspect-environments)
62
+ - [`killpy delete` — remove environments](#killpy-delete--remove-environments)
63
+ - [`killpy stats` — disk usage summary](#killpy-stats--disk-usage-summary)
64
+ - [`killpy clean` — remove cache directories](#killpy-clean--remove-cache-directories)
65
+ - [`killpy doctor` — smart health report](#killpy-doctor--smart-health-report)
66
+ - [killpy vs alternatives](#killpy-vs-alternatives)
67
+ - [FAQ](#faq)
68
+ - [Pre-commit hooks](#pre-commit-hooks)
69
+ - [Safety](#safety)
70
+ - [Roadmap](#roadmap)
71
+ - [Contributing](#contributing)
72
+
73
+ ______________________________________________________________________
74
+
50
75
  ## The Problem
51
76
 
52
77
  If you have been writing Python for more than a year, your disk is probably full of environments you forgot about.
@@ -227,8 +252,11 @@ killpy list --type venv --type conda # filter by type (repeatable)
227
252
  killpy list --older-than 90 # not accessed in the last 90 days
228
253
  killpy list --json # output as a JSON array
229
254
  killpy list --json-stream # stream as NDJSON — one line per env
255
+ killpy list --quiet # suppress progress output (scripts/CI)
230
256
  ```
231
257
 
258
+ While scanning, `killpy list` shows a live progress indicator on **stderr** so you can see which detector is running. Stdout receives only the final output (table, JSON, or NDJSON), so pipes and redirections are never polluted. Use `--quiet` / `-q` to silence the progress indicator entirely.
259
+
232
260
  `--json` example output:
233
261
 
234
262
  ```json
@@ -430,9 +458,12 @@ Deletes every `.venv` / `pyvenv.cfg` env not accessed in the last 90 days, witho
430
458
  **How do I use killpy in a CI pipeline or script?**
431
459
 
432
460
  ```bash
433
- # List as machine-readable JSON
461
+ # List as machine-readable JSON (progress goes to stderr, JSON to stdout)
434
462
  killpy list --json
435
463
 
464
+ # Suppress progress output entirely with --quiet / -q
465
+ killpy list --json --quiet | jq '.[] | .size_human'
466
+
436
467
  # Stream results as NDJSON in real time
437
468
  killpy list --json-stream | jq '.size_bytes'
438
469
 
@@ -440,6 +471,8 @@ killpy list --json-stream | jq '.size_bytes'
440
471
  killpy --path ./build_artifacts --delete-all --yes
441
472
  ```
442
473
 
474
+ Progress messages always go to **stderr**, so stdout is clean for piping even without `--quiet`. Use `-q` when you want no output at all on stderr.
475
+
443
476
  **How do I skip certain directories?**
444
477
 
445
478
  ```bash
@@ -551,7 +584,7 @@ Typical minimal setup (safe for daily use):
551
584
 
552
585
  ```yaml
553
586
  - repo: https://github.com/Tlaloc-Es/KillPy
554
- rev: 0.23.0
587
+ rev: 0.24.0
555
588
  hooks:
556
589
  - id: killpy
557
590
  ```
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "killpy"
3
- version = "0.23.0"
3
+ version = "0.24.0"
4
4
  description = "List all .venv directories and Conda environments 🐍 on your system and check how much space they are using. You can then choose which ones to delete in order to free up space 🧹."
5
5
  readme = "README.md"
6
6
  classifiers = [
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes