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 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
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.
CHANGES
=======
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
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 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
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.
CHANGES
=======
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.
Source Distribution
setuptools-rust-0.5.0.tar.gz
(8.5 kB
view hashes)