Skip to content

mckaymatt/setuptools-rust

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Setuptools helpers for rust Python extensions.

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 RustExtension

setup(name='hello-rust',
      version='1.0',
      rust_extensions=[RustExtension('hello_rust._helloworld', 'extensions/Cargo.toml')],
      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 python27-sys
    Finished debug [unoptimized + debuginfo] target(s) in 0.0 secs

Creating /.../lib/python2.7/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

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
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 bool no_binding:If you don't want to run pyo3 or rust-cpython, set this to True. Useful if you want to use a different interface like CFFI.

Commands

  • build - Standard build command builds all rust extensions.
  • build_ext - 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.

About

Setuptools plugin for Rust support

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 96.5%
  • Rust 3.5%