Getting the embedded CPython onto THIS machine.
The interpreter is a DIRECTORY — a cdylib plus the vendored standard library
beside it, tens of megabytes — so it is neither a maven dependency nor a
resource inside a jar. A native distribution stages it beside the binary and
the wrapper points VIS_PYTHON_NATIVE_PATH at it; everywhere else (a source
checkout, a gateway running from clojure -M:vis) it is fetched ONCE from the
runtime's own GitHub release into ~/.vis/python/runtime/<version>/<platform>/
and named through runtime/use-library!, because a JVM cannot set its own
environment.
Resolution that already answers is never disturbed: an environment variable,
a staged distribution and a built checkout all win over the network. The
archive is unpacked into a sibling directory and MOVED into place, so a second
process sees a complete installation or none — never a half-written standard
library — and tar does the unpacking because the tree carries symlinks and
execute bits that no jar or zip round-trips.
Getting the embedded CPython onto THIS machine. The interpreter is a DIRECTORY — a cdylib plus the vendored standard library beside it, tens of megabytes — so it is neither a maven dependency nor a resource inside a jar. A native distribution stages it beside the binary and the wrapper points `VIS_PYTHON_NATIVE_PATH` at it; everywhere else (a source checkout, a gateway running from `clojure -M:vis`) it is fetched ONCE from the runtime's own GitHub release into `~/.vis/python/runtime/<version>/<platform>/` and named through `runtime/use-library!`, because a JVM cannot set its own environment. Resolution that already answers is never disturbed: an environment variable, a staged distribution and a built checkout all win over the network. The archive is unpacked into a sibling directory and MOVED into place, so a second process sees a complete installation or none — never a half-written standard library — and `tar` does the unpacking because the tree carries symlinks and execute bits that no jar or zip round-trips.
(archive-url version platform)The release asset for one version and platform tag.
The release asset for one version and platform tag.
(ensure-library!)Make the interpreter for this platform resolvable, answering the library path.
A no-op when the runtime already resolves one. Otherwise the cached installation is used, or the platform archive is fetched into it first. Concurrent cold callers share one installation and recheck resolution after acquiring the lock.
Make the interpreter for this platform resolvable, answering the library path. A no-op when the runtime already resolves one. Otherwise the cached installation is used, or the platform archive is fetched into it first. Concurrent cold callers share one installation and recheck resolution after acquiring the lock.
(ensure-project! project)Prepare an extension with bundled uv and the worker's embedded Python. An offline check reuses a ready environment without resolution or installation; otherwise uv owns lock updates, dependency groups and its package cache.
Prepare an extension with bundled uv and the worker's embedded Python. An offline check reuses a ready environment without resolution or installation; otherwise uv owns lock updates, dependency groups and its package cache.
(installer-error installer phase {:keys [exit timeout? diagnostics out]})A safe installation failure for CLI/UI boundaries. Keep only the verdict and a bounded, redacted diagnostic tail, never a raw command or exception cause.
A safe installation failure for CLI/UI boundaries. Keep only the verdict and a bounded, redacted diagnostic tail, never a raw command or exception cause.
(pip-install! specs)(pip-install! opts specs)Install specs with pip and make what landed importable in THIS process,
answering pip's own {:exit … :out … :command …}.
python.index_url from the merged vis.yml overrides pip's primary index;
when absent, pip's inherited environment and configuration remain unchanged.
pip runs as a host process writing into a directory this interpreter already
has on sys.path, and a path entry remembers the listing it saw when it was
first read. Without the invalidation the install succeeds and the very next
import still raises ModuleNotFoundError — for the life of the process.
Measured on a machine that had never installed pytest.
Install `specs` with pip and make what landed importable in THIS process,
answering pip's own `{:exit … :out … :command …}`.
`python.index_url` from the merged vis.yml overrides pip's primary index;
when absent, pip's inherited environment and configuration remain unchanged.
pip runs as a host process writing into a directory this interpreter already
has on `sys.path`, and a path entry remembers the listing it saw when it was
first read. Without the invalidation the install succeeds and the very next
import still raises `ModuleNotFoundError` — for the life of the process.
Measured on a machine that had never installed pytest.(preparation-status)Public, credential-free preparation stages keyed by package display name.
Public, credential-free preparation stages keyed by package display name.
(prepared-project project)Validate a manually prepared environment with uv sync --check; never install.
Validate a manually prepared environment with uv sync --check; never install.
(project-environment-exists? project)Check for uv's environment without creating it or resolving dependencies. Workspace members share the workspace environment; UV_PROJECT_ENVIRONMENT overrides .venv and relative overrides resolve against the workspace root. An existing but invalid environment still needs preparation, not shared fallback.
Check for uv's environment without creating it or resolving dependencies. Workspace members share the workspace environment; UV_PROJECT_ENVIRONMENT overrides .venv and relative overrides resolve against the workspace root. An existing but invalid environment still needs preparation, not shared fallback.
(uv-command! args)(uv-command! args {:keys [shared?]})Run bundled upstream uv with unchanged arguments and stdio; return its exit code. Explicit :shared? opts select Vis's shared sync workflow, never a project venv. Vis's python.index_url supplies UV_DEFAULT_INDEX unless uv's index environment is already set. Explicit uv CLI options retain upstream precedence.
Run bundled upstream uv with unchanged arguments and stdio; return its exit code. Explicit :shared? opts select Vis's shared sync workflow, never a project venv. Vis's python.index_url supplies UV_DEFAULT_INDEX unless uv's index environment is already set. Explicit uv CLI options retain upstream precedence.
(version-globals)Host-owned build metadata shared by Python namespaces and the model prompt. The bundled SDK is versioned with Vis, never with an editable or pip package. Source builds report dev; an unavailable commit is nil, not a guessed release.
Host-owned build metadata shared by Python namespaces and the model prompt. The bundled SDK is versioned with Vis, never with an editable or pip package. Source builds report dev; an unavailable commit is nil, not a guessed release.
(version-globals-python)Python bootstrap statement for the host's build metadata, encoded as JSON.
Python bootstrap statement for the host's build metadata, encoded as JSON.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |