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

Download history • Rust 包仓库 1988/week @ 2024-03-14 • Rust 包仓库 2131/week @ 2024-03-21 • Rust 包仓库 2389/week @ 2024-03-28 • Rust 包仓库 2625/week @ 2024-04-04 • Rust 包仓库 2860/week @ 2024-04-11 • Rust 包仓库 2532/week @ 2024-04-18 • Rust 包仓库 3154/week @ 2024-04-25 • Rust 包仓库 3127/week @ 2024-05-02 • Rust 包仓库 2846/week @ 2024-05-09 • Rust 包仓库 3503/week @ 2024-05-16 • Rust 包仓库 3756/week @ 2024-05-23 • Rust 包仓库 4050/week @ 2024-05-30 • Rust 包仓库 2997/week @ 2024-06-06 • Rust 包仓库 3326/week @ 2024-06-13 • Rust 包仓库 3556/week @ 2024-06-20 • Rust 包仓库 2768/week @ 2024-06-27 • Rust 包仓库

每月下载量 13,366

Python-2.0 OR MPL-2.0

1MB
22K SLoC

Rust 20K SLoC // 0.1% comments • Rust 包仓库 Python 2.5K SLoC // 0.0% comments • Rust 包仓库

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])是否实现 SerializeDeserialize

依赖项

~11–23MB
~361K SLoC