Skip to content

Commit 5d3923d

Browse files
Instructions and some help by default
1 parent caf31ff commit 5d3923d

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,29 @@ pip install local-storage-utils
1414

1515
This installs the `lsu` CLI.
1616

17+
Installing from TestPyPI (for dry-runs)
18+
-------------------------------------
19+
20+
If you want to test publishing to TestPyPI and install the package from the test index, prefer doing that inside a virtual environment. This avoids the "externally-managed-environment" / PEP 668 error you saw when trying to install system-wide on Debian/Ubuntu.
21+
22+
Recommended steps:
23+
24+
```bash
25+
# create and activate a virtualenv
26+
python3 -m venv .venv
27+
source .venv/bin/activate
28+
29+
# upgrade pip in the venv
30+
python -m pip install --upgrade pip
31+
32+
# install from TestPyPI; use --extra-index-url so runtime dependencies are resolved from the real PyPI
33+
pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple local-storage-utils
34+
```
35+
36+
Notes:
37+
- The error "externally-managed-environment" happens when pip is blocked from modifying a system Python managed by the OS (PEP 668). The recommended fix is to use a virtual environment or pipx — do not use `--break-system-packages` unless you understand the risks.
38+
- If you prefer `pipx` for isolated CLI installs, use `pipx install` inside a separate environment or consult pipx docs for installing from alternate indexes.
39+
1740
## Install (from source)
1841

1942
git clone <this-repo-url>

cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from commands.analyze_entity_fields import analyze_field_contributions, print_field_summary
1111
from commands.cleanup_expired import cleanup_expired
1212

13-
app = typer.Typer(help="Utilities for analyzing and managing local Datastore/Firestore (Datastore mode)")
13+
app = typer.Typer(help="Utilities for analyzing and managing local Datastore/Firestore (Datastore mode)", no_args_is_help=True)
1414

1515
# Aliases with flags only — no defaults here
1616
ConfigOpt = Annotated[Optional[str], typer.Option("--config", help="Path to config.yaml")]

0 commit comments

Comments
 (0)