Conversation
4b1dac4 to
5e795ee
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
This PR extends tool.maturin.features to support conditional Cargo features that are enabled based on the target Python interpreter version using PEP 440 version specifiers.
Changes:
- Added a
FeatureSpectype to parse either plain feature strings or conditional{ feature, python-version }objects. - Plumbed conditional feature extraction into
BuildContextand resolve/enable them during Cargo build command construction. - Updated JSON schema and documentation, and added tests for parsing and resolution.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/pyproject_toml.rs | Introduces FeatureSpec, updates ToolMaturin.features, and adds tests for conditional feature parsing/resolution. |
| src/compile.rs | Resolves conditional features from BuildContext using the target interpreter and appends them to Cargo features. |
| src/build_options.rs | Extracts conditional feature rules from pyproject.toml and ensures only plain features become base Cargo features. |
| src/build_context.rs | Stores conditional feature rules on BuildContext. |
| maturin.schema.json | Extends schema to allow mixed string/object feature entries via FeatureSpec. |
| guide/src/config.md | Documents conditional features under [tool.maturin]. |
Extend `[tool.maturin] features` to accept both plain feature strings
and conditional objects with `feature` and `python-version` keys:
```toml
features = [
"always-on-feature",
{ feature = "pyo3/abi3-py311", python-version = ">=3.11" },
{ feature = "pyo3/abi3-py38", python-version = "<3.11" },
]
```
Conditional features use PEP 440 version specifiers and are resolved at
build time against the target Python interpreter version.
Closes PyO3#2472
5e795ee to
f4e93f0
Compare
netbsd-srcmastr
pushed a commit
to NetBSD/pkgsrc
that referenced
this pull request
Feb 22, 2026
## 1.12.4 * Upgrade memmap2 version ([#3021](PyO3/maturin#3021)) * Fix: platform tag detection for Android targets ([#3023](PyO3/maturin#3023)) * Fix: only ignore maturin-generated native libraries on all platforms ([#3025](PyO3/maturin#3025)) * Fix: ignore develop artifacts for all binding types during build ([#3026](PyO3/maturin#3026)) * Feat: support conditional cargo features based on Python version ([#3027](PyO3/maturin#3027)) ## 1.12.3 * Ci: set crt-static for riscv64 and loongarch64 musl targets ([#3009](PyO3/maturin#3009)) * Fix: support `maturin develop` on Windows ARM with x86 Python ([#3011](PyO3/maturin#3011)) * Fix: exclude `external_packages` bindings from uniffi wheels ([#3013](PyO3/maturin#3013)) * Update cargo-zigbuild to 0.22.1 ([#3015](PyO3/maturin#3015)) * Feat: build wheels from sdist with `--sdist` flag ([#3014](PyO3/maturin#3014)) * Feat: add `include-import-lib` option to bundle Windows import libraries in wheels ([#3017](PyO3/maturin#3017)) * Fix: auditwheel external lib check respects musllinux and reports symbol versions ([#3019](PyO3/maturin#3019))
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Extend
[tool.maturin] featuresto accept both plain feature strings and conditional objects withfeatureandpython-versionkeys:Conditional features use PEP 440 version specifiers and are resolved at build time against the target Python interpreter version.
Closes #2472