pyo3/examples/plugin
2023-04-13 22:47:55 +01:00
..
.template update release notes for 0.18.3 2023-04-13 22:47:55 +01:00
plugin_api
python_plugin
src
.DS_Store add cargo-generate template for plugin example 2023-01-27 08:34:09 +00:00
cargo-generate.toml add cargo-generate template for plugin example 2023-01-27 08:34:09 +00:00
Cargo.toml
README.md

plugin

An example of a Rust app that uses Python for a plugin. A Python extension module built using PyO3 and maturin is used to provide interface types that can be used to exchange data between Rust and Python. This also deals with how to separately test and load python modules.

Building and Testing

Host application

To run the app itself, you only need to run

cargo run

It will build the app, as well as the plugin API, then run the app, load the plugin and show it working.

Plugin API testing

The plugin API is in a separate crate plugin_api, so you can test it separately from the main app.

To build the API only package, first install maturin:

pip install maturin

When building the plugin, simply using maturin develop will fail to produce a viable extension module due to the features arrangement of PyO3. Instead, one needs to enable the optional feature as follows:

cd plugin_api
maturin build --features "extension-module"

Alternatively, install nox and run the tests inside an isolated environment:

nox

Copying this example

Use cargo-generate:

$ cargo install cargo-generate
$ cargo generate --git https://github.com/PyO3/pyo3 examples/plugin

(cargo generate will take a little while to clone the PyO3 repo first; be patient when waiting for the command to run.)