Skip to main content

Jupyter extension which executes Rust functions in Python

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

rustdef-0.4.0-cp311-cp311-manylinux_2_34_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.34+ x86-64

rustdef-0.4.0-cp311-cp311-macosx_10_7_x86_64.whl (855.6 kB view hashes)

Uploaded CPython 3.11 macOS 10.7+ x86-64

rustdef-0.4.0-cp310-cp310-manylinux_2_34_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.34+ x86-64

rustdef-0.4.0-cp310-cp310-macosx_10_7_x86_64.whl (855.6 kB view hashes)

Uploaded CPython 3.10 macOS 10.7+ x86-64

rustdef-0.4.0-cp39-cp39-manylinux_2_34_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.34+ x86-64

rustdef-0.4.0-cp39-cp39-macosx_10_7_x86_64.whl (855.6 kB view hashes)

Uploaded CPython 3.9 macOS 10.7+ x86-64

rustdef-0.4.0-cp38-cp38-manylinux_2_34_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.34+ x86-64

rustdef-0.4.0-cp38-cp38-macosx_10_7_x86_64.whl (855.3 kB view hashes)

Uploaded CPython 3.8 macOS 10.7+ x86-64

rustdef-0.4.0-cp37-cp37m-manylinux_2_34_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.34+ x86-64

rustdef-0.4.0-cp37-cp37m-macosx_10_7_x86_64.whl (855.2 kB view hashes)

Uploaded CPython 3.7m macOS 10.7+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page