#pyo3 #built #cpython #python

构建 pyo3-built

将使用 built 获取到的构建变量暴露为 PyDict

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日

#47FFI

Download history 2113/week @ 2024-04-26 1695/week @ 2024-05-03 1515/week @ 2024-05-10 774/week @ 2024-05-17 405/week @ 2024-05-24 471/week @ 2024-05-31 741/week @ 2024-06-07 608/week @ 2024-06-14 710/week @ 2024-06-21 547/week @ 2024-06-28 919/week @ 2024-07-05 529/week @ 2024-07-12 370/week @ 2024-07-19 570/week @ 2024-07-26 543/week @ 2024-08-02 553/week @ 2024-08-09

2,100 每月下载量
nanoset-py 中使用

Apache-2.0

9KB
90

pyo3-built

简单宏,将使用 built Crate 获取到的元数据暴露为 PyDict

Build License Source Crate GitHub issues

用法

将以下内容添加到您的 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" 之外的所有内容都被启用。

无运行时依赖