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 | Provenance | Actions |
|---|---|---|---|---|
| setuptools-rust-1.2.0.tar.gz | 285.8 kB | Without provenance | Details for setuptools-rust-1.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| setuptools_rust-1.2.0-py3-none-any.whl | Python 3 | none | any | Details for setuptools_rust-1.2.0-py3-none-any.whl |
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
|
Security for setuptools-rust 1.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.