https://github.com/emakryo/rustdef
Jupyter extension for Rust.
https://github.com/emakryo/rustdef
jupyter-extension jupyter-notebook python rust
Last synced: 7 months ago
JSON representation
Jupyter extension for Rust.
- Host: GitHub
- URL: https://github.com/emakryo/rustdef
- Owner: emakryo
- License: mit
- Created: 2020-01-26T04:08:22.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-03-13T02:57:27.000Z (over 3 years ago)
- Last Synced: 2025-09-25T09:22:33.672Z (10 months ago)
- Topics: jupyter-extension, jupyter-notebook, python, rust
- Language: Python
- Homepage:
- Size: 165 KB
- Stars: 29
- Watchers: 1
- Forks: 1
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# rustdef
[](https://github.com/emakryo/rustdef/actions?query=branch%3Amaster)
[](https://badge.fury.io/py/rustdef)
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](https://github.com/PyO3/pyo3) and
[maturin](https://github.com/PyO3/maturin).
## Examples
- [Get Started](examples/Get%20started.ipynb)
- [Type conversion](examples/types.ipynb)
- [Numpy example](examples/numpy.ipynb)
## Prerequisite
- Python >= 3.7 and pip >= 19.3
- [Jupyter notebook](https://jupyter.org/install.html)
- [Rust](https://www.rust-lang.org/tools/install)
- [cargo-edit](https://crates.io/crates/cargo-edit)
## Install
```shell script
$ pip install rustdef
```
## Usage
Define rust functions,
```rust
%%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.
```shell script
$ 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