Skip to content

emakryo/rustdef

Repository files navigation

rustdef

Test PyPI version

Jupyter extension for jupyter notebooks and rust users.

You can define functions in rust and run them as python functions. This extension is built on PyO3 and maturin.

Examples

Prerequisite

Install

$ pip install rustdef

Usage

Define rust functions,

%%rustdef
#[pyfunction]
fn my_func(x: i64, y: &str) -> i64 {
    println!("{}", y);
    x + y.len() as i64
}

Add dependencies, (e.g. num crate)

%rustdef deps add num@0.4.0

Defined dependencies are valid only in the current notebook.

Show dependencies,

%rustdef deps show
num = "0.4.0"

[pyo3]
version = "0.13.2"
features = [ "extension-module",]

pyo3 is included by default.

Develop

How does it work?

Roughly, definitions in rustdef are available in python after the following steps.

  1. Each rustdef magic cell is populated with the module definition of pyo3
  2. A new crate is generated for the rustdef cell
  3. The crate is compiled into a python wheel by maturin
  4. Install the wheel with pip
  5. Functions with #[pyfunction] attributes are exported into the interpreter namespace in notebooks
  6. Ready to call the function in notebooks!

Build

maturin is required.

$ pip install maturin
$ maturin build
$ pip install target/wheels/rustdef-{version}-{python}-{platform}.whl

ToDo

  • execute within rustdef cell
  • class/module supports
  • customizable module name
  • use functions defined in another cell
  • verbose flag
  • serde support
  • windows support