influxdata/influxdb · error
UnexpectedEOF
UnexpectedEOF
Error message
UnexpectedEOF
What it means
ProcessingEngineError::PythonPackageError wraps a PluginEnvironmentError raised while installing Python packages for a plugin's virtual environment. It occurs when pip/package installation inside the plugin environment fails (network issues, unavailable package versions, broken index). The library throws it lazily when it tries to set up the environment for a Python trigger.
Solutions
- Read the wrapped PluginEnvironmentError message to see which package/command failed.
- Verify network/proxy access to the package index from the server host.
- Fix the requirements list in the plugin (correct names/versions compatible with the Python runtime).
- Pre-install the packages manually into the plugin environment or bake them into the image, then restart the trigger.
Example fix
// before (plugin file) # requirements: pandas==9.9.9 // after # requirements: pandas==2.2.2 # version that exists and matches the runtime Python
Defensive patterns
Strategy: try-catch
Validate before calling
# check requirements resolve before deploying pip download -r requirements.txt -d /tmp/check || echo 'unresolvable requirements'
Try / catch
match result {
Err(ProcessingEngineError::PythonPackageError(e)) => error!("package install failed: {e}; check network and requirements"),
Ok(v) => v,
} Prevention
- Pin known-good, existing package versions in plugin requirements.
- Verify PyPI/proxy reachability from the server host.
- Pre-bake heavy dependencies into the server image.
- Ensure pip exists in the plugin environment's Python.
When it happens
Trigger: Enabling/creating a Python trigger whose plugin declares package requirements when pip install fails: no network access, nonexistent package name/version, incompatible Python version, or the packages are already installed so install is skipped (see PackageInstallationDisabled for the disabled case).
Common situations: Air-gapped or firewalled cluster where PyPI is unreachable; typo'd package or pinned version that doesn't exist; base Python image lacking pip; corporate proxy requiring credentials.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/3952c748ce0d87a6.
Report an issue: GitHub.
Appendix: source
Thrown at core/catalog_cache/src/api/list/v2.rs:196
Self {
response,
current: Default::default(),
decoder: ListDecoder::default(),
}
}
}
/// Decode [`ListEntry`] from a v2 list response
pub fn decode_response(response: Response) -> Result<impl Stream<Item = Result<ListEntry>>> {
let response = response.error_for_status()?;
let state = ListStreamState::new(response);
Ok(stream::try_unfold(state, async move |mut state| {
loop {
if state.current.is_empty() {
match state.response.chunk().await? {
Some(new) => state.current = new,
None => {
ensure!(state.decoder.is_message_boundary(), UnexpectedEOFSnafu);
return Ok(None);
}
}
}
if let Some(x) = state.decoder.decode(&mut state.current)? {
return Ok(Some((x, state)));
}
}
}))
}
#[cfg(test)]
mod tests {
use super::*;
use crate::CacheValue;
#[test]View on GitHub (pinned to 06200ef96b)