feature:pip-install
Install the declared features from PyPI as pre-built packages.
Usage
splent feature:pip-install
No arguments or options. The command installs the features declared in the active product’s pyproject.toml.
Description
Reads [tool.splent].features from the product’s pyproject.toml and installs each entry as a PyPI package via pip install.
This is what the production image runs. scripts/00_install_features.sh, which does pip install -e against the local checkout, is the development path and never runs here.
Two things about this are worth stating plainly rather than discovering.
- Only
[tool.splent].featuresis read.features_devandfeatures_prodare not installed by this command, even thoughproduct:buildmerges them into the deploy env and Compose. A feature declared only underfeatures_prodreaches the image’s configuration and is never installed into it, and fails at import time with nothing pointing back at the declaration. The command lists any such entry before it starts. - An entry without
@versionbecomes a bare package name. It does not fail, and it does not install the workspace checkout. pip resolves it against PyPI and installs whatever is published there, which may be years old. Every one is reported at the end for exactly that reason.
Version resolution
| pyproject entry | pip command |
|---|---|
splent-io/splent_feature_auth@v1.5.3 |
pip install splent_feature_auth==1.5.3 |
splent-io/splent_feature_auth (no version) |
pip install splent_feature_auth (whatever PyPI serves) |
Example output
Installing 7 feature(s) from PyPI...
installing splent_feature_auth==1.5.3
ok splent_feature_auth==1.5.3
installing splent_feature_public==1.5.2
ok splent_feature_public==1.5.2
...
All 7 feature(s) installed from PyPI.
A failure does not stop the run. Every failing spec is collected, listed at the end, and the command exits non zero.
Where each path applies
| Context | What installs the features | Where they come from |
|---|---|---|
| Development | scripts/00_install_features.sh (pip install -e), run by entrypoints/entrypoint.dev.sh |
<product>/features/<org>/<name>, filled by product:resolve from the git tag into .splent_cache/features/, or symlinked to a checkout at the workspace root |
| Production image | splent feature:pip-install, in the builder stage of docker/Dockerfile.<product>.prod |
PyPI |
| CI pipeline | splent feature:pip-install |
PyPI |
Your local code only ever reaches a container in development. A production build resolves nothing from the workspace.
Requirements
SPLENT_APPmust be set.- PyPI must be reachable.
- Features must be published to PyPI (via
feature:release).
See also
feature:release. Publish a feature to PyPIproduct:resolve. Clone pinned features from their git tag for developmentproduct:build. Build the production Docker image