fix: resolve PyO3 extension-module linking for cargo test and maturin builds#24
Merged
pratyush618 merged 1 commit intomasterfrom Mar 11, 2026
Merged
Conversation
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.
Problem
Two interacting issues caused builds to break:
CI
rust-test—cargo test --workspacefailed with undefinedPy_*symbols becauseextension-modulewas always-on in workspace pyo3 features, telling PyO3 not to link libpython. Test executables need libpython linked.Publish workflow (maturin builds) — After fixing (1) by removing
extension-modulefrom workspace defaults, maturin builds broke. Maturin specially handles"pyo3/extension-module"inpyproject.tomlfeatures by stripping it from--featuresand settingPYO3_BUILD_EXTENSION_MODULE=1via env instead. Withoutextension-modulein workspace defaults, the cargo feature was never activated and pyo3 tried to link libpython (cannot find -lpython3.9).Fix
Cargo.toml— Removeextension-modulefrom workspace pyo3 featurescrates/taskito-python/Cargo.toml— Addextension-module = ["pyo3/extension-module"]as an explicit crate featurepyproject.toml— Change"pyo3/extension-module"→"extension-module"in maturin features so maturin passes it as a normal cargo feature (activatingpyo3/extension-modulethrough the crate feature, not via env var).github/workflows/ci.yml— Add Python setup +LD_LIBRARY_PATHtorust-testsocargo test --workspacecan link libpythonResult: maturin builds activate
pyo3/extension-module(no libpython linking, correct for.so).cargo testruns without that feature and links libpython normally.