Setuptools rust extension plugin
Project description
Setuptools helpers for rust Python extensions implemented with `PyO3 python binding <https://github.com/PyO3/pyo3>`_.
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`.
You can build `manylinux1` binary wheels using Docker:
.. code-block:: bash
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
: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.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
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`.
You can build `manylinux1` binary wheels using Docker:
.. code-block:: bash
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
: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.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.
Source Distribution
setuptools-rust-0.7.1.tar.gz
(12.5 kB
view hashes)