12 个版本
使用旧的 Rust 2015
0.5.0 | 2024年4月11日 |
---|---|
0.4.7 | 2022年5月2日 |
0.4.6 | 2021年8月19日 |
0.4.5 | 2021年2月19日 |
0.2.0 | 2019年5月28日 |
#47 在 FFI
2,100 每月下载量
在 nanoset-py 中使用
9KB
90 行
pyo3-built
简单宏,将使用 built
Crate 获取到的元数据暴露为 PyDict
用法
将以下内容添加到您的 Cargo.toml
清单中
[build-dependencies]
built = { version = "0.7", features = ["chrono"] }
[dependencies]
pyo3-built = "0.5"
创建您的 build.rs
,就像您通常使用 built
一样,但也要激活依赖项元数据
//! build.rs
extern crate built;
fn main() {
built::write_built_file().expect("Failed to acquire build-time information");
}
然后,在您的 Python 扩展的专用模块中包含生成的文件,并使用 pyo3_built!
宏生成 PyDict
//! lib.rs
#[macro_use]
extern crate pyo3_built;
extern crate pyo3;
use pyo3::prelude::*;
#[allow(dead_code)]
mod build {
include!(concat!(env!("OUT_DIR"), "/built.rs"));
}
/// Module documentation string
#[modinit("mymodule")]
fn init(py: Python, m: &PyModule) -> PyResult<()> {
// ... //
m.add("__build__", pyo3_built!(py, build))?;
Ok(())
}
就这样!在编译您的扩展模块后,__build__
属性将包含以下元数据
>>> import mymodule
>>> mymodule.__build__
{
"build-time": datetime.datetime(2018, 5, 11, 16, 43, 28),
"debug": true,
"dependencies": {
...
"pyo3": "0.6.0",
"pyo3-built": "0.1.0",
"pyo3cls": "0.6.0",
...
},
"features": [
"PYO3"
],
"host": {
"triple": "x86_64-unknown-linux-gnu"
},
"opt-level": "0",
"rustc": "rustc",
"rustc-version": "rustc 1.27.0-nightly (acd3871ba 2018-05-10)",
"target": {
"arch": "x86_64",
"endianness": "little",
"env": "gnu",
"family": "unix",
"os": "linux",
"pointer-width": "64",
"profile": "debug",
"triple": "x86_64-unknown-linux-gnu"
}
}
自定义
在调用宏时,可以通过后缀要添加到字典中的参数列表来控制将添加到构建字典中的内容。请参见以下示例
m.add("__build__", pyo3_built!(py, build, "time", "git", "target"))?;
以下参数可用,与 built 类别相对应
"构建"
"time"
(需要chrono
特性)"依赖项"
"features"
(需要cargo-lock
特性)"主机"
"目标"
"git"
(需要git2
特性)
默认情况下,除了 "git"
之外的所有内容都被启用。