Skip to main content

Setuptools rust extension plugin

Project description

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
^^^^^^^^

.. code-block:: python

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`


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 int binding: Controls which python binding is in use.
`Binding.PyO3` uses PyO3
`Binding.RustCPython` uses rust-cpython
`Binding.NoBinding` uses no binding.

: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.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


Download files

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

Source Distribution

setuptools-rust-0.6.4.tar.gz (9.9 kB view details)

Uploaded Source

File details

Details for the file setuptools-rust-0.6.4.tar.gz.

File metadata

File hashes

Hashes for setuptools-rust-0.6.4.tar.gz
Algorithm Hash digest
SHA256 3e563b13f161b3fdbe1a3783df66ba1ff39c301083ef95496fd67b7d67d76d2f
MD5 c2022389c553a680747bf6a165624e18
BLAKE2b-256 093268b35ff768df77459a2f54d3f12d9baba30726888e45d4f29196cd6e4c08

See more details on using hashes here.

Supported by

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