18 次重大发布
0.24.0 | 2022年12月29日 |
---|---|
0.23.0 | 2022年11月8日 |
0.22.0 | 2022年6月5日 |
0.20.0 | 2022年3月6日 |
0.6.0 | 2020年2月13日 |
在 开发工具 中排名 1064
每月下载量 13,366
1MB
22K SLoC
pyembed
pyembed
是一个 Rust 库 crate,它简化了在 Rust 应用程序中控制 Python 解释器的过程。它是 pyo3
crate(提供 Rust 接口以访问 Python 的 C APIs)的包装。它相对于直接使用 pyo3
的主要价值主张在于,它提供了额外的增值功能,例如与 oxidized_importer
扩展模块的集成,以从内存中导入 Python 模块和资源。
pyembed
是 PyOxidizer 项目的组成部分,但任何嵌入 Python 的 Rust 项目的开发者都可以使用它。
lib.rs
:
控制嵌入的 Python 解释器。
pyembed
crate 包含了控制当前进程中运行的嵌入 Python 解释器的功能。
pyembed
提供了比官方 在另一个应用程序中嵌入 Python 文档和 CPython C API 提供的功能更全面的额外功能。例如,pyembed
可以利用自定义的 Python 元路径导入器,该导入器可以使用 0-copy 从内存中导入 Python 模块字节码。
这个 crate 最初是为 PyOxidizer 项目的需求而设计的,并作为该项目的组成部分进行维护。然而,这个 crate 是通用的,可以在 PyOxidizer 之外的项目中使用。
在这个 crate 中,最重要的类型是 [OxidizedPythonInterpreterConfig] 和 [MainPythonInterpreter]。一个 [OxidizedPythonInterpreterConfig] 定义了 Python 解释器应该如何行为。一个 [MainPythonInterpreter] 创建并管理该解释器,并作为运行解释器中代码的高级接口。
依赖项
在底层,pyembed
直接使用 pyo3
crate 进行低级 Python FFI 绑定以及高级接口。
本 crate 的一个明确目标是尽可能少地依赖外部依赖项。 这是因为我们希望最小化生成的二进制文件中的冗余。
功能
可选的 allocator-jemalloc
功能控制了对使用 jemalloc 作为 Python 内存分配器的支持。从 Python 使用 Jemalloc 是由 [OxidizedPythonInterpreterConfig] 类型控制的运行时配置选项,并且将 jemalloc
编译进二进制文件并不意味着它正在使用!
可选的 allocator-mimalloc
功能控制了对使用 mimalloc 作为 Python 内存分配器的支持。该功能的行为类似于上面文档中的 jemalloc
。
可选的 allocator-snmalloc
功能控制了对使用 snmalloc 作为 Python 内存分配器的支持。该功能的行为类似于上面文档中的 jemalloc
。
可选的 serialization
功能控制配置类型(如 [OxidizedPythonInterpreterConfig])是否实现 Serialize
和 Deserialize
。
依赖项
~11–23MB
~361K SLoC