sgl-project/sglang · error · RuntimeError
failed to build {crate.python_module} with Cargo
Error message
failed to build {crate.python_module} with Cargo What it means
`cargo build` failed or could not be spawned while building the crate; the original OSError/CalledProcessError is chained. The Cargo stderr appears in the traceback's __cause__.
Source
Thrown at python/sglang/srt/rust_extensions/loader.py:350
command = [
"cargo",
"build",
"--release",
"--locked",
"--package",
crate.package,
]
if crate.features:
command.extend(("--features", ",".join(crate.features)))
environment = os.environ.copy()
environment["CARGO_TARGET_DIR"] = os.fspath(target_dir)
environment["PYO3_PYTHON"] = sys.executable
logger.info("Building %s with `%s`", crate.python_module, " ".join(command))
try:
subprocess.run(command, cwd=crate.workspace, env=environment, check=True)
except (OSError, subprocess.CalledProcessError) as exc:
raise RuntimeError(f"failed to build {crate.python_module} with Cargo") from exc
release_dir = target_dir / "release"
if target := environment.get("CARGO_BUILD_TARGET"):
release_dir = target_dir / target / "release"
artifact = release_dir / _cargo_library_filename(crate.library)
if not artifact.is_file():
raise FileNotFoundError(
f"Cargo completed but did not produce the expected artifact {artifact}"
)
return artifact
def _cargo_library_filename(library: str) -> str:
if sys.platform == "win32":
return f"{library}.dll"
if sys.platform == "darwin":
return f"lib{library}.dylib"
return f"lib{library}.so"View on GitHub (pinned to 0132848349)
Solutions
- Read the chained CalledProcessError/underlying cargo output for the compile error and fix it
- Run `cargo build --locked` manually in the workspace to reproduce
- Ensure network access for crates.io (or a vendored/offline mirror) and a compatible Rust version
- Use the prebuilt wheel to avoid compiling
Defensive patterns
Strategy: try-catch
Validate before calling
subprocess.run(["cargo", "build", "--locked"], cwd=workspace, check=True) # preflight the build
Try / catch
try:
load_rust_extension(...)
except RuntimeError as e:
cause = e.__cause__
log_cargo_output(cause)
raise Prevention
- Build once in Docker/CI with network access; cache artifacts
- Pin a Rust toolchain version compatible with pyo3
When it happens
Trigger: load_rust_extension triggering a source build where cargo exits non-zero (compile error, dependency fetch failure) or cannot execute (missing binary).
Common situations: Rust compile errors in the crate; offline environment preventing dependency downloads; cargo absent from PATH; incompatible rustc version vs pyo3.
Related errors
- Rust sources under {crate.workspace} changed during the buil
- Rust workspace for {python_module} was not found at {workspa
- {lockfile} is required for reproducible `cargo build --locke
- {manifest} declares python-module {python_module!r} but must
- Cargo completed but did not produce the expected artifact {a
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/6dcb2b5b098d49f5.
Report an issue: GitHub.