Setuptools rust extension plugin
Project description
Setuptools helpers for rust Python extensions implemented with PyO3 python binding.
Compile and distribute Python extensions written in rust as easily as if they were written in C.
Example
setup.py
from setuptools import setup
from setuptools_rust import Binding, RustExtension
setup(name='hello-rust',
version='1.0',
rust_extensions=[RustExtension('hello_rust._helloworld',
'Cargo.toml', binding=Binding.PyO3)],
packages=['hello_rust'],
# rust extensions are not zip safe, just like C-extensions.
zip_safe=False
)
You can use same commands as for c-extensions. For example:
>>> python ./setup.py develop running develop running egg_info writing hello-rust.egg-info/PKG-INFO writing top-level names to hello_rust.egg-info/top_level.txt writing dependency_links to hello_rust.egg-info/dependency_links.txt reading manifest file 'hello_rust.egg-info/SOURCES.txt' writing manifest file 'hello_rust.egg-info/SOURCES.txt' running build_ext running build_rust cargo build --manifest-path extensions/Cargo.toml --features python3 Finished debug [unoptimized + debuginfo] target(s) in 0.0 secs Creating /.../lib/python3.6/site-packages/hello_rust.egg-link (link to .) Installed hello_rust Processing dependencies for hello_rust==1.0 Finished processing dependencies for hello_rust==1.0
Or you can use commands like bdist_wheel or bdist_egg.
You can build manylinux1 binary wheels using Docker:
docker run --rm -v `pwd`:/io quay.io/pypa/manylinux1_x86_64 /io/build-wheels.sh
build-wheels.sh example can be found here: https://github.com/PyO3/setuptools-rust/blob/master/example/build-wheels.sh
RustExtension
You can define rust extension with RustExtension class:
RustExtension(name, path, args=None, features=None, rust_version=None, quiet=False, debug=False)
The class for creating rust extensions.
- param str name:
the full name of the extension, including any packages – ie. not a filename or pathname, but Python dotted name. It is possible to specify multiple binaries, if extension uses Binsing.Exec binding mode. In that case first argument has to be dictionary. Keys of the dictionary corresponds to compiled rust binaries and values are full name of the executable inside python package.
- param str path:
path to the Cargo.toml manifest file
- param [str] args:
a list of extra argumenents to be passed to cargo.
- param [str] features:
a list of features to also build
- param str rust_version:
sematic version of rust compiler version – for example >1.14,<1.16, default is None
- param bool quiet:
Does not echo cargo’s output. default is False
- param bool debug:
Controls whether –debug or –release is passed to cargo. If set to None then build type is auto-detect. Inplace build is debug build otherwise release. Default: None
- param int binding:
Controls which python binding is in use. Binding.PyO3 uses PyO3 Binding.RustCPython uses rust-cpython Binding.NoBinding uses no binding. Binding.Exec build executable.
- param int strip:
Strip symbols from final file. Does nothing for debug build. Strip.No - do not strip symbols (default) Strip.Debug - strip debug symbols Strip.All - strip all symbols
- param bool script:
Generate console script for executable if Binding.Exec is used.
- param bool native:
Build extension or executable with “-C target-cpu=native”
- param bool optional:
if it is true, a build failure in the extension will not abort the build process, but instead simply not install the failing extension.
Commands
build - Standard build command builds all rust extensions.
build_rust - Command builds all rust extensions.
clean - Standard clean command executes cargo clean for all rust extensions.
check - Standard check command executes cargo check for all rust extensions.
CHANGES
0.8.4 (2018-02-27)
Improve compatibility of build_rust with build_ext #28
0.8.3 (2017-12-05)
Ignore strip option when platform is win32 #26
0.8.2 (2017-09-08)
Fix script generation for bdist_wheel
0.8.1 (2017-09-08)
Added native parameter
Fix script generation for executables
0.8.0 (2017-09-05)
Support multiple rust binaries #24
0.7.2 (2017-09-01)
Generate console-script for Binding.Exec #22
Do not run cargo check for sdist command #18
Remove extra python3 file extension for executables.
0.7.1 (2017-08-18)
Allow to strip symbols from executable or dynamic library.
Use PyO3 0.2 for example.
0.7.0 (2017-08-11)
Allow to build executable and pack with python package.
Use PyO3 0.1 for example.
0.6.4 (2017-07-31)
check command respects optional option
Don’t fail when Rust isn’t installed while all extensions are optional
0.6.3 (2017-07-31)
Fix pypi source distribution
0.6.2 (2017-07-31)
Add optional option to RustExtension #16
0.6.1 (2017-06-30)
Support CARGO_TARGET_DIR variable #14
0.6.0 (2017-06-20)
Add support for PyO3 project https://github.com/PyO3/PyO3
Add support for no-binding mode
0.5.1 (2017-05-03)
Added support for “cargo test”
Fixed unbound method type error #4
0.5.0 (2017-03-26)
Added support for “cargo check”
0.4.2 (2017-03-15)
Added “–qbuild” option for “build_rust” command. Set “quiet” mode for all extensions.
Added “–debug” and “–release” options for “build_rust” command.
0.4.1 (2017-03-10)
Fixed cargo manifest absolute path detection
0.4 (2017-03-10)
Fixed bdist_egg and bdist_wheel support
setuptool’s clean command cleans rust project as well
Use absolute path to cargo manifest
Enable debug builds for inplace builds, otherwise build release
Simplify monkey patches
0.3.1 (2017-03-09)
Fix compatibility with some old versions of setuptools
0.3 (2017-03-09)
Fixed OSX extension compilation
Use distutils exceptions for errors
Add rust version check for extension
Cleanup example project
0.2 (2017-03-08)
Fix bdist_egg and bdist_wheel commands
0.1 (2017-03-08)
Initial release
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.