PyO3でPythonからRustを使う(1.1)

前回の続きというかやり直し

ライブラリを作る

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! と出力される

関連記事

コメント

タイトルとURLをコピーしました