Setuptools plugin for Rust extensions
setuptools-rust is a plugin for setuptools to build Rust Python extensions implemented with PyO3 or rust-cpython.
Compile and distribute Python extensions written in Rust as easily as if they were written in C.
Setup
For a complete example, see html-py-ever.
First, you need to create a bunch of files:
setup.py
from setuptools import setup
from setuptools_rust import Binding, RustExtension
setup(
name="hello-rust",
version="1.0",
rust_extensions=[RustExtension("hello_rust.hello_rust", binding=Binding.PyO3)],
packages=["hello_rust"],
# rust extensions are not zip safe, just like C-extensions.
zip_safe=False,
)
For a complete reference of the options supported by the RustExtension class, see the
API reference.
pyproject.toml
[build-system]
requires = ["setuptools", "wheel", "setuptools-rust"]
MANIFEST.in
This file is required for building source distributions
include Cargo.toml
recursive-include src *
Usage
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 (after installing wheel). See also the notes in the documentation about building wheels.
Cross-compiling is also supported, using one of crossenv, cross or cargo-zigbuild.
For examples see the test-cross-compile and test-cross and test-zigbuild Github actions jobs in ci.yml.
By default, develop will create a debug build, while install will create a release build.
Commands
build- Standard build command will also build all rust extensions.build_rust- Command builds all rust extensions.clean- Standard clean command executes cargo clean for all rust extensions.
Metadata
Release files for setuptools-rust 1.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| setuptools-rust-1.2.0.tar.gz | 285.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| setuptools_rust-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 307.5 kB
Release files / setuptools-rust-1.2.0.tar.gz
| Download URL | setuptools-rust-1.2.0.tar.gz |
|---|---|
| Size | 285.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0a4ada479e8c7e3d8bd7cb56e1a29acc2b2bb98c2325051b0cdcb57d7f056de8
|
|
BLAKE2b-256 checksum How to use checksums |
4e022fc4c83b4f816fdd30f38c0c4837a322d21967f953bb9a51bce91b4511f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
|
Release files / setuptools_rust-1.2.0-py3-none-any.whl
| Download URL | setuptools_rust-1.2.0-py3-none-any.whl |
|---|---|
| Size | 21.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
decc6bdf4aef0ff3c323ba85e2fcabed8c77044443cd239ea01b67ca9b1d777e
|
|
BLAKE2b-256 checksum How to use checksums |
3e927d8e368c14284ff7dc7df5bf55883f0841a1f7cbcae5517417379c46718f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
|