Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning (for the cli, not for the crate).

Unreleased

  • Add Linux mips64el architecture support in #1023
  • Add Linux mipsel architecture support in #1024
  • Add Linux 32-bit powerpc architecture support in #1026
  • Add Linux sparc64 architecture support in #1027
  • Add PEP 440 local version identifier support in #1037
  • Fix inconsistent Cargo.toml and pyproject.toml path handling in #1043
  • Find python module next to pyproject.toml if pyproject.toml exists in #1044. It's technically a breaking change, but previously it doesn't work properly if the directory containing pyproject.toml isn't recognized as project root.
  • Add python-source option to [tool.maturin] section of pyproject.toml in #1046
  • Deprecate support for specifying python metadata in Cargo.toml in #1048. Please migrate to PEP 621 instead.
  • Change python-source to be relative to the file specifies it in #1049
  • Change data to be relative to the file specifies it in #1051
  • Don't reinstall dependencies in maturin develop in #1052
  • Find pyproject.toml in parent directories of Cargo.toml in #1054

0.13.1 - 2022-07-26

  • Add 64-bit RISC-V support by felixonmars in #1001
  • Add support for invoking with python3 -m maturin in #1008
  • Fix detection of optional dependencies when declaring features in pyproject.toml in #1014
  • Respect user specified Rust target in maturin develop in #1016
  • Use cargo rustc --crate-type cdylib on Rust nightly/dev channel in #1020

0.13.0 - 2022-07-09

  • Breaking Change: Drop support for python 3.6, which is end of life in #945
  • Breaking Change: Don't build source distribution by default in maturin build command in #955, --no-sdist option is replaced by --sdist
  • Breaking Change: maturin no longer search for python interpreters by default and only build for current interpreter in PATH in #964
  • Breaking Change: Removed --cargo-extra-args and --rustc-extra-args options in #972. You can now pass all common cargo build arguments directly to maturin build
  • Breaking Change: --repository-url option in upload command no longer accepts plain repository name, full url required and -r short option moved to --repository in #987
  • Add support for building with multiple binary targets in #948
  • Add a --target option to maturin list-python command in #957
  • Add support for using bundled python sysconfigs for PyPy when abi3 feature is enabled in #958
  • Add support for cross compiling PyPy wheels when abi3 feature is enabled in #963
  • Add --find-interpreter option to build and publish commands to search for python interpreters in #964
  • Infer target triple from ARCHFLAGS for macOS to be compatible with cibuildwheel in #967
  • Expose commonly used Cargo CLI options in maturin build command in #972
  • Add support for wasm32-unknown-emscripten target in #974
  • Allow overriding platform release version using env var in #975
  • Fix maturin develop for arm64 Python on M1 Mac when default toolchain is x86_64 in #980
  • Add --repository option to maturin upload command in #987
  • Only lookup bundled Python sysconfig when interpreters aren't specified as file path in #988
  • Find CPython upper to 3.12 and PyPy upper to 3.10 in #993
  • Add short alias maturin b for maturin build and maturin dev for maturin develop subcommands in #994

0.12.20 - 2022-06-15

  • Fix incompatibility with cibuildwheel for 32-bit Windows in #951
  • Don't require pip error messages to be utf-8 encoding in #953
  • Compare minimum python version requirement between requires-python and bindings crate in #954
  • Set PYO3_PYTHON env var for PyPy when abi3 is enabled in #960
  • Add sysconfigs for x64 Windows PyPy in #962
  • Add support for Linux armv6l in #966
  • Fix auditwheel bundled shared libs directory name in #969

0.12.19 - 2022-06-05

  • Fix Windows Store install detection in #949
  • Filter Python interpreters by target pointer width on Windows in #950

0.12.18 - 2022-05-29

  • Add support for building bin bindings wheels with multiple platform tags in #928
  • Skip auditwheel for non-compliant linux environment automatically in #931
  • Fix abi3 wheel build issue when no Python interpreters found on host in #933
  • Add Python 3.11 sysconfigs for Linux, macOS and Windows in #934
  • Add Python 3.11 sysconfig for arm64 Windows in #936
  • Add network proxy support to upload command in #939
  • Fix python interpreter detection on arm64 Windows in #940
  • Fallback to py -X.Y when pythonX.Y cannot be found on Windows in #943
  • Auto-detect Python Installs from Microsoft Store in #944
  • Add bindings detection to bin targets in #938

0.12.17 - 2022-05-18

  • Don't consider compile to i686 on x86_64 Windows cross compiling in #923
  • Accept -i x.y and -i python-x.y in maturin build command in #925

0.12.16 - 2022-05-16

  • Add Linux armv7l python sysconfig in #901
  • Add NetBSD python sysconfig in #903
  • Update 'replace_needed' to reduce total calls to 'patchelf' in #905
  • Add wheel data support in #906
  • Allow use python interpreters from bundled sysconfig when not cross compiling in #907
  • Use setuptools-rust for bootstrapping in #909
  • Allow setting the publish repository URL via MATURIN_REPOSITORY_URL in #913
  • Allow stubs-only mixed project layout in #914
  • Allow setting the publish user name via MATURIN_USERNAME in #915
  • Add Windows python sysconfig in #917
  • Add support for generate-import-lib feature of pyo3 in #918
  • Integrate cargo-xwin for cross compiling to Windows MSVC targets in #919

0.12.15 - 2022-05-07

  • Re-export __all__ for pure Rust projects in #886
  • Stop setting RUSTFLAGS environment variable to an empty string in #887
  • Add hardcoded well-known sysconfigs for effortless cross compiling in #896
  • Add support for PYO3_CONFIG_FILE in #899

0.12.14 - 2022-04-25

  • Fix PyPy pep517 build when abi3 feature is enabled in #883

0.12.13 - 2022-04-25

  • Stop setting PYO3_NO_PYTHON environment variable for pyo3 0.16.4 and later in #875
  • Build Windows abi3 wheels for pyo3 0.16.4 and later versions with generate-abi3-import-lib feature enabled no longer require a Python interpreter in #879

0.12.12 - 2022-04-07

  • Migrate docker image to GitHub container registry in #845
  • Change mixed rust/python template project layout for new projects in #855
  • Automatically include license files in .dist-info/license_files following PEP 639 in #862
  • Bring back multiple values support for --interpreter option in #873
  • Update the default edition to 2021 for new projects by sa- in #874
  • Drop python3.6 from ghcr.io/pyo3/maturin docker image.

0.12.11 - 2022-03-15

  • Package license files in .dist-info/license_files following PEP 639 in #837
  • Stop testing Python 3.6 on CI since it's already EOL in #840
  • Update workspace members for sdist local dependencies in #844
  • Migrate docker image to github container registry in #845
  • Remove PYO3_NO_PYTHON hack for Windows in #848
  • Remove Windows abi3 python lib link hack in #851
  • Add -r option as a short alias for --release in #854

0.12.10 - 2022-03-09

  • Add support for pyo3-ffi by ijl in #804
  • Defaults to musllinux_1_2 for musl target if it's not bin bindings in #808
  • Remove support for building only sdist via maturin build -i in #813, use maturin sdist instead.
  • Add macOS target support for --zig in #817
  • Migrate Python dependency toml to tomllib / tomli by Contextualist in #821
  • Disable auditwheel for PEP 517 build wheel process in #823
  • Lookup existing cffi header.h in workspace target directory in #833
  • Fix license line ending in wheel metadata for Windows in #836

0.12.9 - 2022-02-09

  • Don't require pyproject.toml when cargo manifest is not specified in #806

0.12.8 - 2022-02-08

  • Add missing --version flag from clap 3.0 upgrade

0.12.7 - 2022-02-08

  • Add support for using zig cc as linker for easier cross compiling and manylinux compliance in #756
  • Switch from reqwest to ureq to reduce dependencies in #767
  • Fix missing Python submodule in wheel in #772
  • Add support for specifying cargo manifest path in pyproject.toml in #781
  • Add support for passing arguments to pep517 command via MATURIN_PEP517_ARGS env var in #786
  • Fix auditwheel No such file or directory error when LD_LIBRARY_PATH contains non-existent paths in #794

0.12.6 - 2021-12-31

  • Add support for repairing cross compiled linux wheels in #754
  • Add support for manylinux_2_28 and manylinux_2_31 in #755
  • Remove existing so file first in maturin develop command to avoid triggering SIGSEV in running process in #760

0.12.5 - 2021-12-20

  • Fix docs for new and init commands in maturin --help in #734
  • Add support for x86_64 Haiku in #735
  • Fix undefined auditwheel policy panic in #740
  • Fix sdist upload for packages where the pkgname contains multiple underscores in #741
  • Implement auditwheel repair with patchelf in #742
  • Add Cargo.lock to sdist when --locked or --frozen specified in #749
  • Infer readme file if not specified in #751

0.12.4 - 2021-12-06

  • Add a maturin init command as a companion to maturin new in #719
  • Don't package non-path-dep crates in sdist for workspaces in #720
  • Build release packages with password-storage feature in #725
  • Add support for x86_64 DargonFly BSD in #727
  • Add a Python import hook in #729
  • Allow pip warnings in maturin develop command in #732

0.12.3 - 2021-11-29

  • Use platform tag from sysconfig.platform on non-portable Linux in #709
  • Consider current machine architecture when generating platform tags for abi3 wheels on linux in #709
  • Revert back to Rust 2018 edition in #710
  • Warn missing cffi package dependency in #711
  • Add support for Illumos in #712
  • Account for MACOSX_DEPLOYMENT_TARGET env var in wheel platform tag in #716

0.12.2 - 2021-11-26

  • Add support for excluding files from wheels by .gitignore in #695
  • Fix pip install maturin on OpenBSD 6.8 in #697
  • Add support for x86, x86_64 and aarch64 on NetBSD in #704
  • Add a maturin new command for bootstrapping new projects in #705

0.12.1 - 2021-11-21

  • Add support for cross compiling PyPy wheels in #687
  • Fix sysconfig.get_platform parsing for macOS in #690

0.12.0 - 2021-11-19

  • Add support for PEP 660 editable installs in #648
  • Publish musllinux_1_1 wheels for maturin in #651
  • Refactor develop command to act identical to PEP 660 editable wheels in #653
  • Upgrade to Rust 2021 edition in #655
  • Add support for powerpc64 and powerpc64le on FreeBSD by pkubaj in #656
  • Fix false positive missing pyinit warning on arm64 macOS in #673
  • Build without rustls on arm64 Windows by nsait-linaro in #674
  • Publish Windows arm64 wheels to PyPI by nsait-linaro in #675
  • Add support for building on Windows mingw platforms in #677
  • Allow building for non-abi3 pypy wheels when the abi3 feature is enabled in #678
  • Add support for cross compiling to different operating systems in #680

0.11.5 - 2021-10-13

  • Fixed module documentation missing bug of pyo3 bindings in #639
  • Fix musllinux auditwheel wrongly detects libc forbidden link in #643
  • Fix finding conda Python interpreters on Windows by RobertColton in #644
  • Fix Unicode metadata when uploading to PyPI in #645
  • Fix incorrectly folded long Summary metadata
  • Fix cross compilation for Python 3.10 in #646

0.11.4 - 2021-09-28

  • Autodetect PyPy executables in #617
  • auditwheel: add libz.so.1 to whitelisted libraries in #625
  • auditwheel: detect musl libc in #629
  • Fixed Python 3.10 and later versions detection on Windows in #630
  • Install entrypoint scripts in maturin develop command in #633 and #634
  • Add support for installing optional dependencies in maturin develop command in #635
  • Fixed build error when manylinux/compatibility options is specified in pyproject.toml in #637

0.11.3 - 2021-08-25

  • Add path option for Python source in #584
  • Add auditwheel support for musllinux in #597
  • [tool.maturin] options from pyproject.toml will be used automatically in #605
  • Skip unavailable Python interpreters from pyenv in #609

0.11.2 - 2021-07-20

  • Use UTF-8 encoding when reading pyproject.toml by domdfcoding in #588
  • Use Cargo's repository field as Source Code in project URL in #590
  • Fold long header fields in Python metadata in #594
  • Fix maturin develop for PyPy on Unix in #596

0.11.1 - 2021-07-10

  • Fix sdist error when VCS has uncommitted renamed files in #585
  • Add maturin completions <shell> command to generate shell completions in #586

0.11.0 - 2021-07-04

  • Add support for reading metadata from PEP 621 project table in pyproject.toml in #555
  • Users should migrate away from the old [package.metadata.maturin] table of Cargo.toml to this new [project] table of pyproject.toml
  • Add PEP 656 musllinux support in #543
  • --manylinux is now called --compatibility and supports musllinux
  • The pure rust install layout changed from just the shared library to a python module that reexports the shared library. This should have now observable consequences for users of the created wheel expect that my_project.my_project is now also importable (and equal to just my_project)
  • Add support for packaging type stubs in pure Rust project layout in #567
  • Support i386 on OpenBSD in #568
  • Support Aarch64 on OpenBSD in #570
  • Support Aarch64 on FreeBSD in #571
  • Cargo.toml's authors field is now optional per Rust RFC 3052 in #573
  • Allow dotted keys in Cargo.toml by switch from toml_edit to toml crate in #577
  • Fix source distribution with local path dependencies on Windows in #580

0.10.6 - 2021-05-21

  • Fix corrupted macOS binary release in #547
  • Fix build with the "upload" feature disabled by ravenexp in #548

0.10.5 - 2021-05-21

  • Add manylinux_2_27 support in #521
  • Add support for Windows arm64 target in #524
  • Always output PEP 600 platform tags in #525
  • Fix missing PyInit_<module_name> warning with Rust submodule in #528
  • Better cross compiling support for PyO3 binding on Unix in #454
  • Fix s390x architecture support in #530
  • Fix auditwheel panic with s390x wheels in #532
  • Support uploading heterogeneous wheels by ravenexp in #544
  • Warn about pyproject.toml missing maturin version constraint in #545

0.10.4 - 2021-04-28

  • Interpreter search now uses python 3.6 to 3.12 in #495
  • Consider requires-python when searching for interpreters in #495
  • Support Rust extension as a submodule in mixed Python/Rust projects in #489

0.10.3 - 2021-04-13

  • The upload command is now implemented, it is mostly similar to twine upload. #484
  • Interpreter search now uses python 3.6 to 3.12
  • Add basic support for OpenBSD in #496
  • Fix the PowerPC platform by messense in #503

0.10.2 - 2021-04-03

  • Fix --target being silently ignored

0.10.1 - 2021-04-03

  • Fix a regression in 0.10.0 that would incorrectly assume we're building for musl instead of gnu by messense in #487
  • Basic s390x support

0.10.0 - 2021-04-02

  • Change manylinux default version based on target arch by messense in #424
  • Support local path dependencies in source distribution (i.e. you can now package a workspace into an sdist)
  • Set a more reasonable LC_ID_DYLIB entry on macOS by messense #433
  • Add --skip-existing option to publish by messense #444
  • maturn develop install dependencies automatically by messense #443
  • Load credential from pypirc using repository name instead of package name by messense #445
  • Add manylinux_2_24 support in #451
  • Improve error message when auditwheel failed to find versioned offending symbols in #452
  • Add auditwheel test to CI in #455
  • Fix sdist transitive path dependencies.
  • auditwheel choose higher priority tag when possible in #456, dropped auditwheel Cargo feature.
  • develop now writes an INSTALLER file
  • develop removes an old .dist-info directory if it exists before installing the new one
  • Fix wheels for PyPy on windows containing extension modules with incorrect names. #482

0.9.4 - 2021-02-18

  • Fix building a bin with musl

0.9.3

  • CI failure

0.9.2 - 2021-02-17

  • Escape version in wheel metadata by messense in #420
  • Set executable bit on shared library by messense in #421
  • Rename classifier to classifiers for pypi compatibility. The old classifier is still available and now also works with pypi
  • Fix building for musl by automatically setting -C target-feature=-crt-static

0.9.1 - 2021-01-13

  • Error when the abi3 feature is selected but no minimum version
  • Support building universal2 wheels (x86 and aarch64 in a single file) by messense in #403
  • Recognize PYO3_CROSS_LIB_DIR for cross compiling with abi3 targeting windows.
  • package.metadata.maturin.classifier is renamed to classifiers by kngwyu in #416
  • Added more instructions to building complex manylinux setups

0.9.0 - 2021-01-10

  • Added support for building abi3 wheels with pyo3 0.13.1
  • Python 3.9 is supported (it should have worked before, but it is now tested on ci)
  • There are 64-bit and aarch64 binary builds for linux and 64-bit builds for windows, mac and freebsd-12-1
  • The auditwheel options have changed to --manylinux=[off|2010|2014] with manylinux2010 as default, and optionally --skip-auditwheel.
  • Removed Python 3.5 since it is unsupported
  • The default and minimum manylinux version is now manylinux2010
  • restructured text (rst) readmes are now supported, by clbarnes in #360
  • Allow python 3 interpreter with debuginfo use maturin by inevity in #370
  • pypirc is checked for credentials by houqp in #374
  • Added support for PowerPC by mzpqnxow and programmerjake in #366
  • project-url is now a toml dictionary instead of a toml list to conform to the standard
  • No more retry loop when the password was wrong
  • When bootstrapping, also search for cargo.exe if cargo was not found

0.8.3 - 2020-08-17

Added

  • tox is now supported due to a bugfix in the latest version of tox
  • [tool.maturin] now supports sdist-include = ["path/**/*"] to include arbitrary files in source distributions (#296).
  • Add support for PyO3 0.12's PYO3_PYTHON environment variable. #331

Fixed

  • Fix incorrectly returning full path (not basename) from PEP 517 build_sdist hook. This fixes tox support from maturin's side
  • Packages installed with maturin develop are now visible to pip and can be uninstalled with pip

0.8.2 - 2020-06-29

Added

  • Python 3.8 was added to PATH in the docker image by oconnor663 in #302

0.8.1 - 2020-04-30

Added

  • cffi is installed if it's missing and python is running inside a virtualenv.

0.8.0 - 2020-04-03

Added

  • There is now a binary wheel for aarch64
  • Warn if there are local dependencies

Fixed

  • Omit author_email if @ is not found in authors by evandrocoan in #290

0.7.9 - 2020-03-06

Fixed

  • This release includes binary wheels for mac os

0.7.8 - 2020-03-06

Added

  • Added support from arm, specifically arm7l, aarch64 by ijl in #273
  • Added support for manylinux2014 by ijl in #273

Fixed

  • Remove python 2 from tags by ijl in #254
  • 32-bit wheels didn't work on linux. This has been fixed by dae in #250
  • The path of the RECORD file on windows used a backward slash instead of a forward slash

0.7.7 - 2019-11-12

Added

  • The setup.py installer for bootstrapping maturin now checks for cargo instead of failing with a complex error message.
  • Upload errors now show the filesize

Changed

  • maturin's metadata now lists a requirement of python3.5 or later to install.

0.7.6 - 2019-09-28

Changed

  • Only --features, --no-default-features and --all-features in --cargo-extra-args are passed to cargo metadata when determining the bindings, fixing problems in the previous release with arguments supported by cargo build but by cargo metadata.

0.7.5 - 2019-09-24

Fixed

  • Fix clippy error to fix publishing from ci

0.7.4 - 2019-09-22

Fixed

  • Fix tests

0.7.3 - 2019-09-22

Fixed

  • Fix building when the bindings crate is behind a feature flag

0.7.3 - 2019-09-22

Removed

  • The manylinux docker container doesn't contain musl anymore. If you're targeting musl, there's no need to use manylinux.

0.7.2 - 2019-09-05

Added

  • Allow cross compilation with cffi and a python interpreter with the host target

Fixed

  • Renamed a folder to maturin so PEP 517 backend works again.

0.7.1 - 2019-08-31

Added

  • maturin build --interpreter/maturin publish --interpreter builds only a source distribution.

0.7.0 - 2019-08-30

With this release, the name of this project changes from pyo3-pack to maturin.

Added

  • Mixed rust/python layout
  • Added PEP 517 support
  • Added a maturin sdist command as workaround for pypa/pip#6041
  • Support settings all applicable fields from the python core metadata specification in Cargo.toml
  • Support for FreeBSD by kxepal #173

0.6.1

Fixed

  • Downgraded to structopt 0.2.16 to avoid the yanked 0.2.17

0.6.0

Added

  • Basic pypy support by ijl #105

Removed

  • Python 2 support
  • The custom progress bar was removed and cargo's output is shown instead

0.5.0

Added

  • Support for conda environments on windows by paddyhoran #52
  • maturin will generate a header for cffi crates using cbinding, which means you don't need a build.rs anymore. The option to provide your own header file using a build.rs still exists.
  • The konstin2/maturin docker image makes it easy to build fully manylinux compliant wheels. See the readme for usage details.
  • Support for manylinux2010 by ijl #70
  • The --manxlinux=[1|1-unchecked|2010|2010-unchecked|off] option allows to build for manylinux1 and manylinux2010, both with audithweel (1 or 2010) and without (1-unchecked or 2010-unchecked), but also for the native linux tag with off.

Changed

  • The --skip-auditwheel flag has been deprecated in favor of --manxlinux=[1|1-unchecked|2010|2010-unchecked|off].
  • Switched to rustls. This means the upload feature can be used from the docker container and builds of maturin itself are manylinux compliant when compiled with the musl target.

0.4.2 - 2018-12-15

Fixup release because the appveyor failed to release artifacts for windows for 0.4.1.

0.4.1 - 2018-12-15

Added

  • You can now specify trove classifiers in your Cargo.toml with package.metadata.maturin.classifier. Implemented by ijl in #48. Example:
 [package.metadata.maturin]
 classifier = ["Programming Language :: Python"]

0.4.0 - 2018-11-20

Changed

  • publish defaults to release and strip, unless --debug or --no-strip are given.

Added

  • New ci script based on hyperfine which also builds debian packages.

0.3.10 - 2018-11-16

Fixed

  • Fix rust-cpython detection and compilation

0.3.9

Changed

0.3.8

Fixed

0.3.7

Fixed

  • Added cargo lock to project #9

0.3.6

With deflate and the strip options, the wheels get about 25x smaller:

wheelbaselinedeflatestrip + deflate
get_fourtytwo-2.0.1-cp36-cp36m-manylinux1_x86_64.whl2,8M771K102K
hello_world-0.1.0-py2.py3-none-manylinux1_x86_64.whl3,9M1,1M180K
points-0.1.0-py2.py3-none-manylinux1_x86_64.whl2,8M752K85K

Added

  • --strip by ijl #7

Changed

  • Renamed --bindings-crate to --bindings
  • Use deflate compression for zips by ijl #6

Fixed

  • --target is now actually used for the wheel compatibility tag

0.3.5 - 2018-09-20

Changed

  • Upgraded to reqwest 0.9

Fixed

  • "Broken Pipe" with musl builds (through the reqwest upgrade)

0.3.4 - 2018-09-18

Added

  • A --target option which behaves like cargo option of the same name

Changed

  • Musl and auditwheel compliance: Using the new musl feature combined with the musl target, you can build completely static binaries. The password-storage, which enables keyring integration, is now disabled by default. The Pypi packages are now statically linked with musl so that they are audtiwheel compliant.
  • Replaced --debug with --release. All builds are now debug by default

0.3.3 - 2018-09-17

Added

  • Builds for i686 linux and mac
  • Builds for maturin as wheel

Fixed

  • Usage with stable
  • Wrong tags in WHEEL file on non-linux platforms
  • Uploading on windows

0.3.1 - 2017-09-14

Fixed

  • Windows compilation

0.3.0 - 2017-09-14

Added

  • Packaging binaries
  • Published on pypi. You can now pip install maturin
  • A Dockerfile based on manylinux1

Fixed

  • Travis ci setup builds all types of wheels for linux and mac
  • --no-default-features --features auditwheel creates a manylinux compliant binary for maturin

Changed

  • Replaced elfkit with goblin

0.2.0 - 2018-09-03

Added

  • Cffi support
  • A develop subcommand
  • A tox example

Changed

  • Show a progress bar for cargo's compile progress

0.1.0 - 2018-08-22

  • Initial Release