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.
Register more than one catalog (first name wins on install):
lpip source add company --type git --url ssh://git@gitlab.com/org/lpip-catalog.git --revision main
lpip source add local --type file --path ~/lpip-sources.toml
lpip source list
lpip source remove local
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).
lpip version / lpip --version print this tool’s installed version.
lpip install --upgrade / -U and lpip upgrade pass pip --upgrade
(same for -r).
Commands: lpip install, lpip upgrade, lpip list, lpip show,
lpip versions, lpip version, lpip validate (--strict fails on
name clashes across sources), lpip doctor,
lpip catalog … (init, add, refresh, …), lpip source … (list,
add, remove), 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).
Metadata
Release files for esys-lpip 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| esys_lpip-0.4.0.tar.gz | 42.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| esys_lpip-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 73.5 kB
Release files / esys_lpip-0.4.0.tar.gz
| Download URL | esys_lpip-0.4.0.tar.gz |
|---|---|
| Size | 42.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6212381e66e16f64d34aa90c20f32894d7f7d1e3d479bd028d4533ed780b4fa7
|
|
BLAKE2b-256 checksum How to use checksums |
3574528468aeeee50f4f081a6ae68c662d6f9595ee8c93ffabd887d03a42d7ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Release files / esys_lpip-0.4.0-py3-none-any.whl
| Download URL | esys_lpip-0.4.0-py3-none-any.whl |
|---|---|
| Size | 31.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
965c89aa6680fdbe30afb808da91319ed4af74797151e329adb54f9698c9935b
|
|
BLAKE2b-256 checksum How to use checksums |
5dca1bf5330536309a1baa2018e8783c4a69d80949bde36288083ae7260bb827
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Security for esys-lpip 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.