lpip
Git-backed, name-oriented front end to pip for internal Python packages —
no internal PyPI registry required.
Install from PyPI as esys-lpip (pip install esys-lpip); the command
and import remain lpip.
Status
| Item | Value |
|---|---|
| Workflow | A2C 0.10.0 (ADR-0000) |
| Profile | python-pypi |
| Product | v1 CLI on PyPI as esys-lpip (0.1.1) |
What this is
lpip (local-pip) resolves a logical package name from a TOML catalog
(lpip-sources.toml), validates configuration and prerequisites, and delegates
installation to python -m pip install .... The catalog may be a local file
or a Git-backed checkout in a persistent user cache.
It is a small client, not a package manager replacement, registry, or service (ADR-0001, ADR-0004).
Why Git instead of a private index
A private package index is a second service: you host it, keep it up, and
invent another login. lpip treats Git as the index. Names resolve to
git+ URLs; pip installs the tree. Access control is whatever you already
use to clone — typically SSH keys or deploy keys. No extra account, no extra
host, no extra secret type.
Public PyPI is how you install this tool. Internal packages stay in the Git you already operate.
Non-goals (v1)
- Internal package index or hosted registry
- A dependency resolver other than pip
- Background daemons, lockfile solving, or workspace orchestration
Quick start
pip install esys-lpip
lpip --help
From a clone (contributors):
python -m venv .venv
# Windows: .venv\Scripts\activate
# Unix: source .venv/bin/activate
pip install -e ".[dev]"
pytest
Re-run scripts/setup-dev after clone if you need pre-commit and gitlint
hooks (see docs/workflow/adoption.md).
Intended configuration
Local catalog:
[source]
type = "file"
path = "~/company/lpip-sources.toml"
Git-backed catalog:
[source]
type = "git"
url = "ssh://git.company/dev/lpip-catalog.git"
revision = "main"
path = "lpip-sources.toml"
refresh = "auto"
Example catalog entry:
[packages.libfoo]
url = "git+ssh://git.company/libs/libfoo.git"
revision = "main"
subdirectory = "python"
Author that file in the catalog Git repository (then commit and push).
--url is a normal clone URL (ssh://, https://, or git@host:path);
lpip stores git+ssh / git+https for pip:
cd /path/to/lpip-catalog
lpip catalog init
lpip catalog add libfoo --url ssh://git.company/libs/libfoo.git --revision main --subdirectory python
# or: lpip catalog add # prompts for missing fields
Consumers only fetch (source.type = git + lpip catalog refresh). add /
init do not write the consumer cache.
Install a mixed list (lpip-requirements.txt is the usual name): catalog
names first, then pip for the rest. Bare lpip install NAME still fails if
the name is not in the catalog.
lpip install libfoo==1.2.3
lpip install -r lpip-requirements.txt
lpip install -r lpip-requirements.txt --catalog-only
== on a catalog name selects the Git tag (1.2.3 or v1.2.3). Other
specifiers on catalog names fail; PyPI lines in -r are passed to pip as-is.
List Git tags that parse as versions (optional leading v):
lpip versions libfoo or lpip index versions libfoo (--pre, --all).
Commands: lpip install, lpip list, lpip show, lpip versions,
lpip validate, lpip doctor, lpip catalog … (init, add, refresh, …),
lpip config …, lpip index versions. Details:
docs/architecture/cli-and-configuration.md.
Documentation
| Topic | Location |
|---|---|
| Architecture | docs/architecture/overview.md |
| Artifact chain | docs/workflow/documentation-structure.md |
| ASRs | docs/asr/ |
| ADRs | docs/adr/INDEX.md |
| Acceptance criteria | docs/ac/ |
| A2C adoption | docs/workflow/adoption.md |
| Release | docs/release-pipeline.md |
| Publishing | docs/package-publishing.md |
| GitLab CI | docs/gitlab-ci.md |
| Agent entry | AGENTS.md |
License
MIT (pyproject.toml).
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 esys_lpip-0.2.0.tar.gz.
File metadata
- Download URL: esys_lpip-0.2.0.tar.gz
- Upload date:
- Size: 35.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
86aa3ee5d7fb08dfb8db22a952acc151fc8bfae16eb34d632b59941308a9b93a
|
|
| MD5 |
30e2a8db185fd9dd0442b4621857d983
|
|
| BLAKE2b-256 |
53061e61e02a2b84abf8bb165ac6613566f78c7b5544619530cd35ef3396359f
|
File details
Details for the file esys_lpip-0.2.0-py3-none-any.whl.
File metadata
- Download URL: esys_lpip-0.2.0-py3-none-any.whl
- Upload date:
- Size: 27.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
741c77654ed5ef45628eb805086936e7f79e926ff3affe06958b87baf9080362
|
|
| MD5 |
21c029635a89767c20a16119860d30fe
|
|
| BLAKE2b-256 |
f1c8fbe87b8189c38ec8f2033201c98fbddf35c453aaeced8267732214e97b93
|