14个版本
0.2.10 | 2024年6月24日 |
---|---|
0.2.9 | 2023年7月4日 |
0.2.7 | 2023年5月25日 |
0.2.6 | 2022年8月21日 |
0.2.0 | 2022年3月22日 |
在构建工具中排名第47
每月下载量80,666次
在14个crate中使用(通过pyo3-build-config)
75KB
323 行
独立的python3(y).dll
导入库生成器
为MinGW-w64和MSVC(交叉)编译目标生成Python DLL的导入库(无论是python3.dll
还是python3y.dll
)。
此crate不需要在(交叉)编译宿主系统上存在Python 3分发文件。
此crate使用binutils dlltool
程序为MinGW-w64目标生成Python DLL导入库。设置环境变量PYO3_MINGW_DLLTOOL
将覆盖目标默认的dlltool
命令名称。
注意:MSVC交叉编译目标需要宿主系统上提供LLVM binutils或Zig。更具体地说,当从Linux的目标*-pc-windows-msvc
时,需要将可执行文件python3-dll-a
的llvm-dlltool
放入PATH
中。
或者,可以将环境变量ZIG_COMMAND
设置为例如"zig"
或"python -m ziglang"
,然后使用zig dlltool
代替llvm-dlltool
(或MinGW binutils)。
PyO3集成
自版本 0.16.5 以来,pyo3
库通过其新的 generate-import-lib
功能实现了对稳定 ABI 和特定版本 Python DLL 导入库生成支持。
在此配置中,python3-dll-a
成为 pyo3
库的依赖项,并且在本地和交叉编译场景中由其构建脚本自动调用。
用于 abi3
PyO3 扩展模块的 Cargo.toml
例子
[dependencies]
pyo3 = { version = "0.16.5", features = ["extension-module", "abi3-py37", "generate-import-lib"] }
用于标准 PyO3 扩展模块的 Cargo.toml
例子
[dependencies]
pyo3 = { version = "0.16.5", features = ["extension-module", "generate-import-lib"] }
独立构建脚本的使用
如果使用较旧的 pyo3
库版本,或需要不同的 Python 绑定库,则可以直接在库构建脚本中使用 python3-dll-a
。
以下示例假设使用 PyO3 的旧版本。
用于 abi3
PyO3 扩展的 build.rs
脚本示例
以下 cargo 构建脚本可用于使用 MinGW-w64 或 MSVC 目标环境 ABI 对 Windows (64/32 位 x86 或 64 位 ARM) 的稳定 ABI PyO3 扩展模块进行交叉编译
fn main() {
if std::env::var("CARGO_CFG_TARGET_OS").unwrap() == "windows" {
let cross_lib_dir = std::env::var_os("PYO3_CROSS_LIB_DIR")
.expect("PYO3_CROSS_LIB_DIR is not set when cross-compiling");
let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap();
let env = std::env::var("CARGO_CFG_TARGET_ENV").unwrap();
let libdir = std::path::Path::new(&cross_lib_dir);
python3_dll_a::generate_implib_for_target(libdir, &arch, &env)
.expect("python3.dll import library generator failed");
}
}
将自动在由环境变量 PYO3_CROSS_LIB_DIR
指向的目录中创建兼容的 python3.dll
导入库文件,命名为 python3.dll.a
或 python3.lib
。
调用 cargo build
的示例
PYO3_CROSS_LIB_DIR=target/python3-dll cargo build --target x86_64-pc-windows-gnu
生成特定版本的 python3y.dll
导入库
作为一个高级特性,python3-dll-a
可以生成特定 Python 版本的导入库,例如 python39.lib
。
有关详细信息,请参阅 ImportLibraryGenerator
构建器 API 描述。
维护
该库基于 CPython 的 stable_abi.toml
文件嵌入 Module-Defitions。
该文件的上游版本位于 CPython 项目的 仓库 中,路径为 Misc/stable_abi.toml
。