`runtime.python` fails with "command not found: python" on a default VM (0.2.21, 0.2.22); Pyodide-distribution packages don't install
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 18/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- javascript, python, rust, wasm
Línea de trabajo
Start from the repro in the issue: AgentOs.create() then runtime.python.evaluate("21 * 2"), which fails with ENOENT: command not found: python. The issue points at command registration in configureVm versus createVm, the bootstrapCommands workaround from #2012, and the /__agentos_pyodide/ wheel path. Pull request #2028 is already open against this, so coordinate with it before starting. Done means python.evaluate returns 42 on a default VM and the Pyodide-distribution packages install.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
The minimal example from the Python docs fails on the published 0.2.21 and 0.2.22 packages:
import { AgentOs } from "@rivet-dev/agentos-core";
const runtime = await AgentOs.create();
try {
const result = await runtime.python.evaluate("21 * 2");
console.log(result.outcome === "succeeded" ? result.value : result.error);
} finally {
await runtime.dispose();
}
Expected: 42. Actual:
{ code: 'execution_start_failed', name: 'ExecutionError', message: 'ENOENT: command not found: python' }
python.execute and python.install return the same error. Adding permissions: { network: "allow" } makes no difference.
From the guest shell, python3 -c "raise SystemExit(7)" exits 0 and prints nothing. The /bin/python3 stub runs as a silent no-op, so callers that check exit codes think the script succeeded.
This looks like the command-registration problem mentioned in passing in #2012 ("configureVm currently omits the runtime commands registered by createVm"). I couldn't find an issue tracking it on its own. #1881 shows python3 working with a plain AgentOs.create({}) on 0.2.15, so it seems to be a regression.
Environment
@rivet-dev/agentos-core0.2.21 and 0.2.22, installed from npm- Node.js 24.21.0
- Linux x64 (glibc, Debian bookworm, kernel 6.8) and macOS x64 (darwin-x64 sidecar): the same result on both
With the #2012 workaround
Adding python/python3 to bootstrapCommands through a SidecarProcess.prototype.configureVm patch, as in #2012, gets Python running:
python.evaluate("21 * 2")returns42.process.execFile("python3", ["-c", ...])works (Python 3.13.2).python3through the guest shell times out. That's #2012, which I understand is fixed on main.
Package installs, with network: "allow" (tested on macOS x64, 0.2.22):
python.install([...]) |
Result |
|---|---|
pypdf |
succeeded, 16 s |
openpyxl |
succeeded, 42 s |
pandas |
timed out after 300 s; import pandas then fails on missing six |
pandas, openpyxl, python-docx, python-pptx, pypdf |
failed: Failed to load Pillow, lxml, typing-extensions / ENOENT: no such file or directory, open '/__agentos_pyodide/pillow-11.3.0-cp313-cp313-pyodide_2025_0_wasm32.whl' (the same for typing_extensions), then Script execution exceeded the CPU-time budget (limits.jsRuntime.cpuTimeLimitMs) |
Pure-Python wheels from PyPI install. Packages that come from the Pyodide distribution (pandas, Pillow, lxml, typing-extensions) don't: their wheels aren't present under /__agentos_pyodide/, and they aren't fetched instead.
Questions
- Is the missing Python command registration a known regression, and is a release with the fix planned?
- How are Pyodide-distribution packages supposed to be provided: bundled, fetched from a CDN, or configured through
AGENTOS_PYODIDE_PACKAGE_BASE_URL/AGENTOS_PYODIDE_INDEX_URL? Is pandas expected to work out of the box, given it's on the preload allowlist?
Happy to rerun this on a release candidate.
- Lenguaje dominante
- Rust
- Estrellas
- 4.7k
- Forks
- 263
- Merge medio
- 7 h 36 min
- PR fusionados (30 d)
- 38
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de rivet-dev/agentos
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
rivet-dev/agentos#2042 · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Python edits to filesystem.writeFile-created files are reverted by shadow reconciliationPosiblemente ocupada @ankssjain la tomó hace 9 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 20/100
rivet-dev/agentos#2022 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 Medio día Aptitud para principiantes 32/100
rivet-dev/agentos#2020 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 66/100
rivet-dev/agentos#1994 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de rivet-dev/agentos
Issues similares
-
RUSTSEC-2026-0348: Brotli certificate decompression can allocate up to 1 GiB before authenticationAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 60/100
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 62/100
-
core: Amount::from_str panics on values above 21M BTC instead of returning an errorPosiblemente ocupada @bhuvan-somisetty la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
crate: spate-s3
Dificultad 2/5 Medio día Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
write_iceberg ignores the table's write.parquet.compression-codec propertyPosiblemente ocupada @YuangGao la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Eventual-Inc/Daft#7606 ·
Los mantenedores suelen responder en 1 día