Stream Python packages at runtime — the PyPI CDN client
Project description
🌀 Whispy Client
Import Python packages at runtime with a zero-dependency client. Keep your scripts clean, your environments disposable, and your setup friction low.
The client lives in the Whispy repository, with the implementation in client/whispy_client and the server entrypoint in server/app.py. It downloads a bundle from a Whispy server, extracts it to a temporary directory, and imports the requested module at runtime.
When to Use It
- Throwaway scripts that need
requests,numpy, orbeautifulsoup4without a setup step. - Short-lived jobs where you want packages to vanish when the process exits.
- Pinned runtime experiments where one exact version matters.
- Self-hosted setups that point at your own server from the main repo.
Quick Examples
from whispy_client import remote, configure
configure(verbose=True)
requests = remote("requests")
numpy = remote("numpy", version="1.26.4")
bs4 = remote("beautifulsoup4", module="bs4", deps=True)
# Version pinning (use the version parameter)
requests = remote("requests", version="2.31.0")
numpy = remote("numpy", version="1.26.4")
# Common import name mismatches
bs4 = remote("beautifulsoup4", module="bs4")
PIL = remote("pillow", module="PIL")
yaml = remote("pyyaml", module="yaml")
dateutil = remote("python-dateutil", module="dateutil")
cv2 = remote("opencv-python", module="cv2", deps=True)
Import Failure Tips
If a package downloads but import fails with an error like No module named 'numpy', that usually means a dependency is missing from the runtime bundle.
- Retry with
deps=Truefor that call. - Or set
configure(deps=True)once for process-wide behavior. - Keep
module="..."when the import name differs from the distribution name.
Example:
# opencv-python imports as cv2 and needs runtime dependencies
cv2 = remote("opencv-python", module="cv2", deps=True)
Install
pip install whispy-client
For local development from this repo:
cd client
pip install -e .
API
remote(package, *, module=None, version=None, deps=False, host=None)
package is a PyPI distribution name. Specify versions using the version parameter (for example: remote("requests", version="2.31.0")). If the import name differs from the distribution name, pass module=....
deps=True asks the server to include install-time dependencies as well. That behavior is best-effort and does not perform full dependency conflict resolution.
| Param | Description |
|---|---|
package |
PyPI distribution name |
module |
Import name if different from the package name |
version |
Explicit version override. Specify versions here instead of embedding them in package |
deps |
Fetch install-time dependencies as well |
host |
Per-call Whispy server override |
configure(*, host=None, deps=None, verbose=None)
Sets process-wide defaults. The default host comes from WHISPY_HOST, falling back to https://whispycdn.dev.
| Param | Description |
|---|---|
host |
Default Whispy server URL |
deps |
Default dependency-fetching behavior |
verbose |
Print progress messages while fetching and importing |
Code References
- The client implementation is in client/whispy_client/core.py.
- The server path that resolves bundles is in server/app.py.
- The release workflow is in the repo workflow file.
License
MIT. Packages are sourced from PyPI and remain under their original licenses.
Project details
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 whispy_client-1.1.7.tar.gz.
File metadata
- Download URL: whispy_client-1.1.7.tar.gz
- Upload date:
- Size: 6.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c930b8eba3d5ca3ffac928ad2369736959e6bb953a8c2675930ba935dbbd06d4
|
|
| MD5 |
17ae0bf25750178feb283fe0ff4fbaff
|
|
| BLAKE2b-256 |
c776cb6f7ba54ded7b3157ee78b95ca77f5f8f542118f9ab86ef10c82f8a3cf2
|
Provenance
The following attestation bundles were made for whispy_client-1.1.7.tar.gz:
Publisher:
ci.yml on Dark-Avenger-Reborn/Whispy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
whispy_client-1.1.7.tar.gz -
Subject digest:
c930b8eba3d5ca3ffac928ad2369736959e6bb953a8c2675930ba935dbbd06d4 - Sigstore transparency entry: 1563701411
- Sigstore integration time:
-
Permalink:
Dark-Avenger-Reborn/Whispy@71268220cfc401090974895e9f80aa6bdc8a6a58 -
Branch / Tag:
refs/tags/v1.1.8 - Owner: https://github.com/Dark-Avenger-Reborn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@71268220cfc401090974895e9f80aa6bdc8a6a58 -
Trigger Event:
push
-
Statement type:
File details
Details for the file whispy_client-1.1.7-py3-none-any.whl.
File metadata
- Download URL: whispy_client-1.1.7-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d78daa2520b65cae0bc915c092869e94d399ae186eca7cc141df069eaf6c7db
|
|
| MD5 |
658c7560791cf6231bf3c323562b14f6
|
|
| BLAKE2b-256 |
6b4362d413b97c48153b6b34ad3779754a7f5cb511386d05aa1f84eb02b05ef7
|
Provenance
The following attestation bundles were made for whispy_client-1.1.7-py3-none-any.whl:
Publisher:
ci.yml on Dark-Avenger-Reborn/Whispy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
whispy_client-1.1.7-py3-none-any.whl -
Subject digest:
7d78daa2520b65cae0bc915c092869e94d399ae186eca7cc141df069eaf6c7db - Sigstore transparency entry: 1563701426
- Sigstore integration time:
-
Permalink:
Dark-Avenger-Reborn/Whispy@71268220cfc401090974895e9f80aa6bdc8a6a58 -
Branch / Tag:
refs/tags/v1.1.8 - Owner: https://github.com/Dark-Avenger-Reborn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@71268220cfc401090974895e9f80aa6bdc8a6a58 -
Trigger Event:
push
-
Statement type: