Skip to main content

Setuptools Rust extension plugin

Project description

Setuptools plugin for Rust extensions

github actions pypi package readthedocs code style: black

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.

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-1.2.0.tar.gz (285.8 kB view details)

Uploaded Source

Built Distribution

setuptools_rust-1.2.0-py3-none-any.whl (21.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: setuptools-rust-1.2.0.tar.gz
  • Upload date:
  • Size: 285.8 kB
  • Tags: Source
  • Uploaded using 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

File hashes

Hashes for setuptools-rust-1.2.0.tar.gz
Algorithm Hash digest
SHA256 0a4ada479e8c7e3d8bd7cb56e1a29acc2b2bb98c2325051b0cdcb57d7f056de8
MD5 50c85a5d19ebb7985dc548c76a3bcc25
BLAKE2b-256 4e022fc4c83b4f816fdd30f38c0c4837a322d21967f953bb9a51bce91b4511f6

See more details on using hashes here.

File details

Details for the file setuptools_rust-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: setuptools_rust-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 21.7 kB
  • Tags: Python 3
  • Uploaded using 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

File hashes

Hashes for setuptools_rust-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 decc6bdf4aef0ff3c323ba85e2fcabed8c77044443cd239ea01b67ca9b1d777e
MD5 f0f899041287bed1ff531a67b9c43293
BLAKE2b-256 3e927d8e368c14284ff7dc7df5bf55883f0841a1f7cbcae5517417379c46718f

See more details on using hashes here.

Supported by

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