前回の続きというかやり直し
ライブラリを作る
cargo new --lib pyo3test
Carto.toml に以下を追加
[lib]
name = "libname"
crate-type = ["cdylib"]
[dependencies.pyo3]
version = "0.14.5"
features = ["extension-module"]
src/lib.rs
use pyo3::prelude::*;
#[pyfunction]
fn rsfun(s: String) -> PyResult<()> {
println!("Hello, {}!", s);
Ok(())
}
// lib.name の名前
#[pymodule]
fn libname(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(rsfun, m)?)?;
Ok(())
}
ビルド
cargo build --release
target/release に libname.dll ができている
これを適切な場所に、拡張子を pyd に変えて置くか、シンボリックリンクを作成(管理者権限でコマンドプロンプトから実行)
mklink (省略)\libname.pyd (省略)\target\release\libname.dll
これで Python から import できる
from mod import libname
if __name__ == "__main__":
libname.rsfun("Name")
Hello, Name! と出力される
関連記事
コメント