Skip to main content

Setuptools rust extension plugin

Project description

https://travis-ci.org/PyO3/setuptools-rust.svg?branch=master https://badge.fury.io/py/setuptools-rust.svg https://img.shields.io/badge/code%20style-black-000000.svg

Setuptools helpers for rust Python extensions implemented with PyO3 python binding.

Compile and distribute Python extensions written in rust as easily as if they were written in C.

Example

For a complete example, see word-count.

setup.py

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 (after installing wheel) or bdist_egg.

You can build manylinux1 binary wheels using Docker, e.g. with the build-wheels.sh script:

docker run --rm -v `pwd`:/io quay.io/pypa/manylinux1_x86_64 /io/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. It is possible to specify multiple binaries, if extension uses Binsing.Exec binding mode. In that case first argument has to be dictionary. Keys of the dictionary corresponds to compiled rust binaries and values are full name of the executable inside python package.

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] rustc_flags:

A list of arguments to pass to rustc, e.g. cargo rustc –features <features> <args> – <rustc_flags>

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. Binding.Exec build executable.

param int strip:

Strip symbols from final file. Does nothing for debug build. Strip.No - do not strip symbols (default) Strip.Debug - strip debug symbols Strip.All - strip all symbols

param bool script:

Generate console script for executable if Binding.Exec is used.

param bool native:

Build extension or executable with “-C target-cpu=native”

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.

  • tomlgen_rust - Automatically generate a Cargo.toml manifest based on Python package metadata. See the example project on GitHub for more information about this command.

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

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

setuptools_rust-0.10.2-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: setuptools-rust-0.10.2.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.0.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.6.5

File hashes

Hashes for setuptools-rust-0.10.2.tar.gz
Algorithm Hash digest
SHA256 2effd86c48b6ea5a559ab92d45ce6cea38fabb3780e2acd7dd0e39b034f220e2
MD5 bd985e0f809d42418d7e1883b5fbf0c0
BLAKE2b-256 cd1cd5823f99fe35801be1683d4266ae4ffb5656eb66fcf0ef56c733b3575ec4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: setuptools_rust-0.10.2-py3-none-any.whl
  • Upload date:
  • Size: 18.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.0.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.6.5

File hashes

Hashes for setuptools_rust-0.10.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8f79fcb8d5a7a8dbe336e3b50a65d141e7f542ebd0b47bbd951d4c02d000cfb9
MD5 12006b5ef4a9c9c951581c19d4c4cf78
BLAKE2b-256 596e0ab90d7023e2249fc7c06ebe7cfb2211d3b86767972f0d63254c349ec2bb

See more details on using hashes here.

Supported by

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