pub struct InterpreterConfig {Show 13 fields
pub implementation: PythonImplementation,
pub version: PythonVersion,
pub shared: bool,
target_abi: PythonAbi,
pub abi3: bool,
pub lib_name: Option<String>,
pub lib_dir: Option<String>,
pub executable: Option<String>,
pub pointer_width: Option<u32>,
pub build_flags: BuildFlags,
pub suppress_build_script_link_lines: bool,
pub extra_build_script_lines: Vec<String>,
pub python_framework_prefix: Option<String>,
}Expand description
Configuration needed by PyO3 to build for the correct Python implementation.
The version and implementation fields correspond to the interpreter
used to host a build. These need not be the same as the implementation and
version fields set for the build target in the target_abi field.
Usually this is queried directly from the Python interpreter, or overridden using the
PYO3_CONFIG_FILE environment variable.
When the PYO3_NO_PYTHON variable is set, or during cross compile situations, then alternative
strategies are used to populate this type.
Fields§
§implementation: PythonImplementationplease use .implementation() getter or InterpreterConfigBuilder instead
The host Python implementation flavor.
Serialized to implementation.
version: PythonVersionplease use .version() getter or InterpreterConfigBuilder instead
The host Python X.Y version. e.g. 3.9.
Serialized to version.
please use .shared() getter or InterpreterConfigBuilder instead
Whether link library is shared.
Serialized to shared.
target_abi: PythonAbi§abi3: boolplease match against target_abi instead
Serialized to abi3.
lib_name: Option<String>please use .lib_name() getter or InterpreterConfigBuilder instead
The name of the link library defining Python.
This effectively controls the cargo:rustc-link-lib=<name> value to
control how libpython is linked. Values should not contain the lib
prefix.
Serialized to lib_name.
lib_dir: Option<String>please use .lib_dir() getter or InterpreterConfigBuilder instead
The directory containing the Python library to link against.
The effectively controls the cargo:rustc-link-search=native=<path> value
to add an additional library search path for the linker.
Serialized to lib_dir.
executable: Option<String>please use .executable() getter or InterpreterConfigBuilder instead
Path of host python executable.
This is a valid executable capable of running on the host/building machine. For configurations derived by invoking a Python interpreter, it was the executable invoked.
Serialized to executable.
pointer_width: Option<u32>please use .pointer_width() getter or InterpreterConfigBuilder instead
Width in bits of pointers on the target machine.
Serialized to pointer_width.
build_flags: BuildFlagsplease use .build_flags() getter or InterpreterConfigBuilder instead
Additional relevant Python build flags / configuration settings.
Serialized to build_flags.
suppress_build_script_link_lines: boolplease use .suppress_build_script_link_lines() getter or InterpreterConfigBuilder instead
Whether to suppress emitting of cargo:rustc-link-* lines from the build script.
Typically, pyo3’s build script will emit cargo:rustc-link-lib= and
cargo:rustc-link-search= lines derived from other fields in this struct. In
advanced building configurations, the default logic to derive these lines may not
be sufficient. This field can be set to Some(true) to suppress the emission
of these lines.
If suppression is enabled, extra_build_script_lines should contain equivalent
functionality or else a build failure is likely.
extra_build_script_lines: Vec<String>please use .extra_build_script_lines() getter or InterpreterConfigBuilder instead
Additional lines to println!() from Cargo build scripts.
This field can be populated to enable the pyo3 crate to emit additional lines from its
its Cargo build script.
This crate doesn’t populate this field itself. Rather, it is intended to be used with externally provided config files to give them significant control over how the crate is build/configured.
Serialized to multiple extra_build_script_line values.
python_framework_prefix: Option<String>please use .python_framework_prefix() getter or InterpreterConfigBuilder instead
macOS Python3.framework requires special rpath handling
Implementations§
Source§impl InterpreterConfig
impl InterpreterConfig
Sourcepub(crate) const PYO3_FFI_CONFIG_ENV_VAR: &str = "DEP_PYTHON_PYO3_CONFIG"
pub(crate) const PYO3_FFI_CONFIG_ENV_VAR: &str = "DEP_PYTHON_PYO3_CONFIG"
Environment variable populated via pyo3-ffi’s build script
Sourcepub(crate) const PYO3_CONFIG_ENV_VAR: &str = "DEP_PYO3_PYTHON_PYO3_CONFIG"
pub(crate) const PYO3_CONFIG_ENV_VAR: &str = "DEP_PYO3_PYTHON_PYO3_CONFIG"
Environment variable populated via pyo3’s build script by forwarding the value from pyo3-ffi
Sourcepub fn implementation(&self) -> PythonImplementation
pub fn implementation(&self) -> PythonImplementation
The Python implementation flavor.
Serialized to implementation.
Sourcepub fn version(&self) -> PythonVersion
pub fn version(&self) -> PythonVersion
Python X.Y version. e.g. 3.9.
Serialized to version.
Whether link library is shared.
Serialized to shared.
Sourcepub fn target_abi(&self) -> PythonAbi
pub fn target_abi(&self) -> PythonAbi
The ABI to use for the compilation target. See the documentation for the PythonAbi enum for more details.
Serialized to target_abi.
Sourcepub fn abi3(&self) -> bool
👎Deprecated since 0.29.0: please use target_abi() instead
pub fn abi3(&self) -> bool
please use target_abi() instead
Whether linking against the stable/limited Python 3 API.
Sourcepub fn lib_name(&self) -> Option<&str>
pub fn lib_name(&self) -> Option<&str>
The name of the link library defining Python.
This effectively controls the cargo:rustc-link-lib=<name> value to
control how libpython is linked. Values should not contain the lib
prefix.
Serialized to lib_name.
Sourcepub fn lib_dir(&self) -> Option<&str>
pub fn lib_dir(&self) -> Option<&str>
The directory containing the Python library to link against.
The effectively controls the cargo:rustc-link-search=native=<path> value
to add an additional library search path for the linker.
Serialized to lib_dir.
Sourcepub fn executable(&self) -> Option<&str>
pub fn executable(&self) -> Option<&str>
Path of host python executable.
This is a valid executable capable of running on the host/building machine. For configurations derived by invoking a Python interpreter, it was the executable invoked.
Serialized to executable.
Sourcepub fn pointer_width(&self) -> Option<u32>
pub fn pointer_width(&self) -> Option<u32>
Width in bits of pointers on the target machine.
Serialized to pointer_width.
Sourcepub fn build_flags(&self) -> &BuildFlags
pub fn build_flags(&self) -> &BuildFlags
Additional relevant Python build flags / configuration settings.
Serialized to build_flags.
Sourcepub fn suppress_build_script_link_lines(&self) -> bool
pub fn suppress_build_script_link_lines(&self) -> bool
Whether to suppress emitting of cargo:rustc-link-* lines from the build script.
Sourcepub fn extra_build_script_lines(&self) -> &[String]
pub fn extra_build_script_lines(&self) -> &[String]
Additional lines to println!() from Cargo build scripts.
Serialized to multiple extra_build_script_line values.
Sourcepub fn python_framework_prefix(&self) -> Option<&str>
pub fn python_framework_prefix(&self) -> Option<&str>
macOS Python3.framework prefix used for special rpath handling.
#[doc(hidden)]pub fn build_script_outputs(&self) -> Vec<String>
fn from_interpreter( interpreter: impl AsRef<Path>, abi3_version: Option<PythonVersion>, abi3t_version: Option<PythonVersion>, ) -> Result<Self>
Sourcepub fn from_sysconfigdata(sysconfigdata: &Sysconfigdata) -> Result<Self>
pub fn from_sysconfigdata(sysconfigdata: &Sysconfigdata) -> Result<Self>
Generate from parsed sysconfigdata file
Use parse_sysconfigdata to generate a hash map of configuration values which may be
used to build an InterpreterConfig.
Sourcepub(crate) fn from_pyo3_config_file_env(target: &Triple) -> Option<Result<Self>>
pub(crate) fn from_pyo3_config_file_env(target: &Triple) -> Option<Result<Self>>
Import an externally-provided config file.
The abi3 features, if set, may apply an abi3 constraint to the Python version.
fn from_path(path: impl AsRef<Path>) -> Result<Self>
pub(crate) fn from_cargo_dep_env() -> Option<Result<Self>>
fn from_reader(reader: impl Read) -> Result<Self>
Source#[doc(hidden)]pub fn to_cargo_dep_env(&self) -> Result<()>
#[doc(hidden)]pub fn to_cargo_dep_env(&self) -> Result<()>
Serialize the InterpreterConfig and print it to the environment for Cargo to pass along
to dependent packages during build time.
NB: writing to the cargo environment requires the
links
manifest key to be set. In this case that means this is called by the pyo3-ffi crate and
available for dependent package build scripts in DEP_PYTHON_PYO3_CONFIG. See
documentation for the
DEP_<name>_<key>
environment variable.
#[doc(hidden)]pub fn to_writer(&self, writer: impl Write) -> Result<()>
Sourcepub fn run_python_script(&self, script: &str) -> Result<String>
pub fn run_python_script(&self, script: &str) -> Result<String>
Run a python script using the InterpreterConfig::executable.
§Panics
This function will panic if the executable is None.
Sourcepub fn run_python_script_with_envs<I, K, V>(
&self,
script: &str,
envs: I,
) -> Result<String>
pub fn run_python_script_with_envs<I, K, V>( &self, script: &str, envs: I, ) -> Result<String>
Run a python script using the InterpreterConfig::executable with additional
environment variables (e.g. PYTHONPATH) set.
§Panics
This function will panic if the executable is None.
pub fn is_free_threaded(&self) -> bool
fn apply_build_env(self) -> Result<InterpreterConfig>
Auto Trait Implementations§
impl Freeze for InterpreterConfig
impl RefUnwindSafe for InterpreterConfig
impl Send for InterpreterConfig
impl Sync for InterpreterConfig
impl Unpin for InterpreterConfig
impl UnsafeUnpin for InterpreterConfig
impl UnwindSafe for InterpreterConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> SizedTypeProperties for T
impl<T> SizedTypeProperties for T
Source§#[doc(hidden)]const SIZE: usize = _
#[doc(hidden)]const SIZE: usize = _
sized_type_properties)Source§#[doc(hidden)]const ALIGN: usize = _
#[doc(hidden)]const ALIGN: usize = _
sized_type_properties)Source§#[doc(hidden)]const ALIGNMENT: Alignment = _
#[doc(hidden)]const ALIGNMENT: Alignment = _
ptr_alignment_type)Source§#[doc(hidden)]const IS_ZST: bool = _
#[doc(hidden)]const IS_ZST: bool = _
sized_type_properties)Source§#[doc(hidden)]const LAYOUT: Layout = _
#[doc(hidden)]const LAYOUT: Layout = _
sized_type_properties)Source§#[doc(hidden)]const MAX_SLICE_LEN: usize = _
#[doc(hidden)]const MAX_SLICE_LEN: usize = _
sized_type_properties)[Self]. Read more