diff --git a/Changelog.md b/Changelog.md index 88eb1880f..2f6a39589 100644 --- a/Changelog.md +++ b/Changelog.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Add path option for Python source in [#584](https://github.com/PyO3/maturin/pull/584) * `[tool.maturin]` options from `pyproject.toml` will be used automatically in [#605](https://github.com/PyO3/maturin/pull/605) +* Skip unavailable Python interpreters from pyenv in [#609](https://github.com/PyO3/maturin/pull/609) ## [0.11.2] - 2021-07-20 diff --git a/src/python_interpreter.rs b/src/python_interpreter.rs index 1aedb35e6..d54a911c6 100644 --- a/src/python_interpreter.rs +++ b/src/python_interpreter.rs @@ -7,7 +7,7 @@ use std::collections::HashSet; use std::fmt; use std::io; use std::path::{Path, PathBuf}; -use std::process::{Command, Stdio}; +use std::process::Command; use std::str; /// This snippets will give us information about the python interpreter's @@ -414,7 +414,6 @@ impl PythonInterpreter { ) -> Result> { let output = Command::new(&executable.as_ref()) .args(&["-c", GET_INTERPRETER_METADATA]) - .stderr(Stdio::inherit()) .output(); let err_msg = format!( @@ -426,7 +425,20 @@ impl PythonInterpreter { if output.status.success() { output } else { - bail!(err_msg); + let stderr = str::from_utf8(&output.stderr).unwrap(); + if stderr.starts_with(&format!( + "pyenv: {}: command not found", + executable.as_ref().display() + )) { + eprintln!( + "⚠️ Warning: skipped unavailable python interpreter '{}' from pyenv", + executable.as_ref().display() + ); + return Ok(None); + } else { + eprintln!("{}", stderr); + bail!(err_msg); + } } } Err(err) => {