NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3649 most downloaded on PyPI
Improved build system generator for Python C/C++/Fortran/Cython extensions
Last release 2 months ago
23 Jul 2026
Ships unpredictably
gaps range from 8 days to 1.5 years
Nearly every release is documented
notes for 35 of 37 stable releases
4 versions withdrawn
withdrawn after publishing
10 years old
42 releases · first in 2016
skbuild.constants and skbuild.cmaker are now deprecation shims keeping only the helpers downstream setup.py files use: skbuild_plat_name(), CMAKE_INST…
The classic scikit-build backend has been replaced by scikit-build-core's setuptools plugin. skbuild.setup() is now a thin wrapper around scikit_build_core.setuptools.wrapper.setup(), and scikit-build depends on scikit-build-core[setuptools]. Most packages — those that only use from skbuild import setup with the documented cmake_* keyword arguments — will continue to build unchanged. New projects are still encouraged to use scikit-build-core directly.
What still works:
from skbuild import setup with cmake_args, cmake_source_dir, cmake_install_dir, cmake_install_target, and cmake_process_manifest_hook.find_package(PythonExtensions), Cython, F2PY, NumPy, ...), now provided via scikit-build-core's cmake.module entry point.SKBUILD CMake variable is still set (now "2" instead of TRUE; both are truthy).setup.py build_ext --inplace builds into the source tree without extra configuration.Breaking changes:
--build-type, -G/--generator, -j, --cmake-executable, --skip-generator-test, --hide-listing, --force-cmake, --skip-cmake, --install-target, and the setup.py <args> -- <cmake args> -- <build tool args> syntax. Use the CMAKE_ARGS/CMAKE_GENERATOR environment variables, the cmake_args keyword, or [tool.scikit-build] settings / SKBUILD_* environment variables instead.cmake_with_sdist=True now raises an error; cmake_languages and cmake_minimum_required_version are ignored with a warning (set cmake.version in [tool.scikit-build] instead).skbuild.command, skbuild.platform_specifics, skbuild.utils, and skbuild.setuptools_wrap were removed. skbuild.constants and skbuild.cmaker are now deprecation shims keeping only the helpers downstream setup.py files use: skbuild_plat_name(), CMAKE_INSTALL_DIR(), and get_cmake_version(). skbuild.exceptions.SKBuildError is now an alias of setuptools' SetupError, so it is no longer a RuntimeError; its SKBuildInvalidFileInstallationError and SKBuildGeneratorNotFoundError subclasses were removed._skbuild build directory is gone; the standard setuptools build/ directories are used (CMake builds in an _skbuild directory under build/temp.*).MANIFEST.in (or use setuptools-scm) like any setuptools project.pip install -e .) require editable.mode = "inplace" in the [tool.scikit-build] table of pyproject.toml.CMAKE_GENERATOR overrides it.scikit-build-core[setuptools]; distro, wheel, and tomli were dropped.add_f2py_target argument handling and the F2PY version regex in #1216python_modules_header include-dir output variable and drop a debug print in #1217.git_archival.txt in #1220One column per quarter.
<!-- Release notes generated using configuration in .github/release.yml at 0.19.1 -->
<!-- Release notes generated using configuration in .github/release.yml at 0.19.1 -->
This is a patch release to add support for Visual Studio 2026.
py.path in #1173Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.19.0...0.19.1
This is a patch release to add support for Visual Studio 2026.
11861191119311941175py.path in {pr}1173117211921174118411791180 and {pr}118311901176, {pr}1182, and {pr}1187<!-- Release notes generated using configuration in .github/release.yml at 0.19.0 -->
<!-- Release notes generated using configuration in .github/release.yml at 0.19.0 -->
This release updates for changes in setuptools and CMake 4, and drops Python 3.7.
setuptools_wrap.py: parse CMAKE_ARGS with shlex.split like elsewhere by @haampie in #1126dry-run (removed in setuptools) in #1166log_level is better than log_cli_level in #1164Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.18.1...0.19.0
This release updates for changes in setuptools and CMake 4, and drops Python 3.7.
setuptools_wrap.py: parse CMAKE_ARGS with shlex.split like elsewhere by @haampie in #1126dry-run (removed in setuptools) in #1166Full Changelog: 0.18.1...0.19.0
<!-- Release notes generated using configuration in .github/release.yml at main --> This release fixes issues with setuptools 74, and avoids a warning
<!-- Release notes generated using configuration in .github/release.yml at main --> This release fixes issues with setuptools 74, and avoids a warning from recent versions of wheel. Android and iOS are now included in known platforms.
Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.18.0...0.18.1
This release fixes issues with setuptools 74, and avoids a warning from recent versions of wheel. Android and iOS are now included in known platforms.
Full Changelog: 0.18.0...0.18.1
This release fixes issues with setuptools 74, and avoids a warning from recent versions of wheel. Android and iOS are now included in known platforms.
1116FeodorFitsner in {pr}11011103s-t-e-v-e-n-k in {pr}1108Remove usage of deprecated distutils in cmake files by @hmaarrfk in #1032
This release bumps the minimum required CMake to 3.5 and supports CPython 3.13.
This release bumps the minimum required CMake to 3.5 and supports CPython 3.13.
108110951094mweinelt in {pr}1073hmaarrfk in {pr}1032ZzEeKkAa in {pr}1030s-t-e-v-e-n-k in {pr}10871092LecrisUT in {pr}1078LecrisUT in {pr}1003LecrisUT in {pr}1050LecrisUT in {pr}99310171082103510141007100810601021105410831091A small fix release with some new platforms and better testing, including CPython 3.12.0b1.
A small fix release with some new platforms and better testing, including CPython 3.12.0b1.
pytest-virtualenv in #879.isolated marker now includes test_distribution tests in #879.get_map match by @keszybz in #990.Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.17.5...0.17.6
A small fix release with some new platforms and better testing, including CPython 3.12.0b1.
pytest-virtualenv in #879.isolated marker now includes test_distribution tests in #879.get_map match by @keszybz in #990.Full Changelog: 0.17.5...0.17.6
A small fix release with some new platforms and better testing, including CPython 3.12.0b1.
mtelka in {pr}983.bhuntsman in {pr}988.879.pytest-virtualenv in {pr}879.isolated marker now includes test_distribution tests in {pr}879.get_map match by {user}keszybz in {pr}990.LecrisUT in {pr}986 and {pr}938.979.A small fix release fixing the passing on of generator specific arguments. This fixes some cases where the Ninja generator was found but then was unab
A small fix release fixing the passing on of generator specific arguments. This fixes some cases where the Ninja generator was found but then was unable to build. NetBSD was reported to work, so was added to the BSD's supported.
Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.17.4...0.17.5
A small fix release fixing the passing on of generator specific arguments. This fixes some cases where the Ninja generator was found but then was unable to build. NetBSD was reported to work, so was added to the BSD's supported.
Full Changelog: 0.17.4...0.17.5
A followup fix to the issue 0.17.3 tried to fix. We now have a method to manually test downstream packages, too.
A followup fix to the issue 0.17.3 tried to fix. We now have a method to manually test downstream packages, too.
Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.17.3...0.17.4
A followup fix to the issue 0.17.3 tried to fix. We now have a method to
manually test downstream packages, too.
Full Changelog: 0.17.3...0.17.4
A small release related to PYTHON_LIBRARY handling changes in 0.17.2; scikit-build 0.17.3 returns an empty string from get_python_library if no Python
A small release related to PYTHON_LIBRARY handling changes in 0.17.2; scikit-build 0.17.3 returns an empty string from get_python_library if no Python library is present (like on manylinux), where 0.17.2 returned None, and previous versions returned a non-existent path. Note that adding REQUIRED to find_package(PythonLibs will fail, but it is incorrect (you must not link to libPython.so) and was really just injecting a non-existent path before.
get_python_library return type string if python lib non-existing for now in #959.FindPythonExtensions in #960.Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.17.2...0.17.3
Another small release with fixes for non-MSVC Windows platforms.
Another small release with fixes for non-MSVC Windows platforms.
Python_LIBRARY on Windows MSVC in #943 and #944.Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.17.1...0.17.2
Another small release with fixes for non-MSVC Windows platforms.
LecrisUT in {pr}937.dlech in {pr}942.Python_LIBRARY on Windows MSVC in {pr}943 and {pr}944.947.948.This is a small release fixing a few bugs; the primary one being a change that was triggering a bug in older FindPython. The unused variable messages
This is a small release fixing a few bugs; the primary one being a change that was triggering a bug in older FindPython. The unused variable messages have been deactivated to simplify output, as well.
CMAKE_OSX_DEPLOYMENT_TARGET a warning (bug in conda-forge's clang activation fixed upstream) in #934Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.17.0...0.17.1
A lot of bug fixes are present in this release, focusing on Windows, PyPy, and cross compiling. We've also improved the compatibility with default set
A lot of bug fixes are present in this release, focusing on Windows, PyPy, and cross compiling. We've also improved the compatibility with default setuptools behaviors a little, and enabled some things that were previously unavailable, like overriding the build type via the cmake argument environment variables. We've expanded our CI matrix to include Windows and macOS PyPy and some Fortran tests on Linux. This release requires Python 3.7+.
include_package_data default by @vyasr in #873.CMAKE_INSTALL_PREFIX by @vyasr in #872..pyx files are in the same directory as CMakeLists.txt by @vyasr in #871.get_include if present in #877.targetLinkLibrariesWithDynamicLookup by @erykoff in #901.MACOSX_DEPLOYMENT_TARGET as if it was unset in #918._compat/typing name in #869.Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.16.7...0.17.0
A lot of bug fixes are present in this release, focusing on Windows, PyPy, and cross compiling. We've also improved the compatibility with default setuptools behaviors a little, and enabled some things that were previously unavailable, like overriding the build type via the cmake argument environment variables. We've expanded our CI matrix to include Windows and macOS PyPy and some Fortran tests on Linux. This release requires Python 3.7+.
include_package_data default. by {user}vyasr in {pr}873.benbovy in {pr}495.CMAKE_INSTALL_PREFIX by {user}vyasr in {pr}872..pyx files are in the same directory as CMakeLists.txt by {user}vyasr in {pr}871.902.904.913. Thanks to user:`maxbachmann` for testing.917 by {user}dlech.get_include if present in {pr}877.targetLinkLibrariesWithDynamicLookup by {user}erykoff in {pr}901.MACOSX_DEPLOYMENT_TARGET as if it was unset in {pr}918.benbovy in {pr}493.906.888.907.922.862.870.899._compat/typing name in {pr}869.<!-- END-BRIEF-CHANGELOG -->
This is expected to be the final release series supporting Python 3.6. 0.17 will require Python 3.7+ and start removing deprecated functionality.
This is expected to be the final release series supporting Python 3.6. 0.17 will require Python 3.7+ and start removing deprecated functionality.
SKBUILD_GNU_SKIP_LOCAL_SYMBOL_EXPORT_OVERRIDE to disable script in #848, thanks to @aaron-bray and @vyasr.This is expected to be the final release series supporting Python 3.6. 0.17 will require Python 3.7+ and start removing deprecated functionality.
SKBUILD_GNU_SKIP_LOCAL_SYMBOL_EXPORT_OVERRIDE to disable script in {pr}848, thanks to {user}aaron-bray and {user}vyasr.859.Fix a discovery regression in 0.16.5 when a cmake folder or cmake.py was present in #848.
cmake folder or cmake.py was present in #848.Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.16.5...0.16.6
Use cmake module if installed over system installs in #839.
-DCMAKE_SYSTEM_PROCESSOR if passed for selecting an arch, useful for cross compiling on conda-forge in #843.This releases backports additions for Windows ARM cross-compiling via cibuildwheel from scikit-build-core 0.1.4.
This releases backports additions for Windows ARM cross-compiling via cibuildwheel from scikit-build-core 0.1.4.
Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.16.3...0.16.4
Pytest 7.2+ is now supported. setup.py and setup_requires are deprecated, and tests are marked as such.
This release fixes logging issues using setuptools 65.6+ affecting our tests. Pytest 7.2+ is now supported. setup.py <command> and setup_requires are deprecated, and tests are marked as such.
Full Changelog: https://github.com/scikit-build/scikit-build/compare/0.16.2...0.16.3
This addresses one more small regression with the FindPython change from 0.16.0 that was affecting conda. #793
This addresses one more small regression with the FindPython change from 0.16.0 that was affecting conda. #793
This was a quick patch release that fixed a missing Python requires setting and some missing files #790, and addressed a warning from setuptools in th
This was a quick patch release that fixed a missing Python requires setting and some missing files #790, and addressed a warning from setuptools in the tests.
All deprecated setuptools/distutils features are also deprecated in scikit-build, like the test command, easy_install, etc. Editable mode is still uns…
This release adds support for Python 3.11 and removes support for Python 2.7 and 3.5 (#688). Testing and static checking improved, including being fully statically typed internally (though setuptools is not fully typed, so it is of limited use).
All deprecated setuptools/distutils features are also deprecated in scikit-build, like the test command, easy_install, etc. Editable mode is still unsupported. Python 3.6 support is deprecated. Older versions of CMake (<3.15) are not recommended; a future version will remove support for older CMake's (along with providing a better mechanism for ensuring a proper CMake is available). If you need any of these features, please open or find an issue explaining what and why you need something.
This release adds support for Python 3.11 and removes support for Python 2.7 and 3.5 ({pr}688). Testing and static checking improved, including being fully statically typed internally (though setuptools is not fully typed, so it is of limited use).
All deprecated setuptools/distutils features are also deprecated in scikit-build, like the test command, easy_install, etc. Editable mode is still unsupported. Python 3.6 support is deprecated. Older versions of CMake (<3.15) are not recommended; a future version will remove support for older CMake's (along with providing a better mechanism for ensuring a proper CMake is available). If you need any of these features, please open or find an issue explaining what and why you need something.
743744774781800.
This release is the final (again) release for Python \< 3.6 and MSVC\<2017. Support for FindPython from CMake 3.12+ was added, including FindPython2.
This release is the final (again) release for Python < 3.6 and MSVC<2017. Support for FindPython from CMake 3.12+ was added, including FindPython2. Support for Cygwin added.
This release is the final (again) release for Python < 3.6 and MSVC<2017. Support for FindPython from CMake 3.12+ was added, including FindPython2. Support for Cygwin added.
hameerabbasi for the contribution. See {pr}712.ax3l and {user}DWesl and {user}poikilos for the help! See {pr}485.SuperSandro2000 for the contribution in {pr}700.This release is the final (again) release for Python < 3.6 and MSVC<2017. Support for FindPython from CMake 3.12+ was added, including FindPython2. Support for Cygwin added.
Add support for FindPython (including 2 and 3). Thanks hameerabbasi for the contribution. See 712.
Add support for Cygwin. Thanks ax3l and DWesl and poikilos for the help! See 485.
Fixed issue with distutils usage in Python 3.10. Thanks to SuperSandro2000 for the contribution in 700.
This release fixes a regression, and reverts a fix in 0.14.0. Some changes made to CI to fix recent removals.
This release fixes a regression, and reverts a fix in 0.14.0. Some changes made to CI to fix recent removals.
SKBUILD_CONFIGURE_OPTIONS not being read.This is the final release for Python \<3.6 and MSVC\<2017.
This is the final release for Python <3.6 and MSVC<2017.
--install-target scikit-build command line option. And cmake_install_target in setup.py. Allows providing an install target different than the default install. Thanks @phcerdan for the contribution. See #477.pyproject.toml and setuptools_scm to build. If you are packaging scikit-build itself, you might need to update your requirements. See #634.This is the final release for Python < 3.6 and MSVC<2017.
--install-target scikit-build command line option. And cmake_install_target in setup.py. Allows providing an install target different than the default install. Thanks {user}phcerdan for the contribution. See {pr}477.kratsg for the contribution in {pr}682. (Reverted in 0.14.1)pekkarr in {pr}678.vyasr in {pr}675.rkaminsk in {pr}673.pyproject.toml and setuptools_scm to build. If you are packaging scikit-build itself, you might need to update your requirements. See {pr}634.665This release fixes two bugs affecting Windows. Users should use "ninja; platform_system!='Windows'", at least for now, since MSVC ships with Ninja, an
This release fixes two bugs affecting Windows. Users should use "ninja; platform_system!='Windows'", at least for now, since MSVC ships with Ninja, and that Ninja is better at finding the matching MSVC than the Python package is. Including it may slow down the search and force the IDE generator instead, but will at least no longer discover GCC instead.
This is likely one of the final releases to support Python 2.7 and 3.5; future releases will likely target at least Python 3.6+ and MSVC 2017+.
This is likely one of the final releases to support Python 2.7 and 3.5; future releases will likely target at least Python 3.6+ and MSVC 2017+.
If you are using scikit-build via pyproject.toml, please remember to include setuptools and wheel. A future version of scikit-build may remove the setuptools install-time hard requirement.
/cmake-modules/Cython now uses Cython default arguments. This no longer adds --no-docstrings in Release and MinSizeRel builds, so Cython docstrings are now retained by default. Additionally, --embed-positions is no longer added to Debug and RelWithDebInfo builds. Users can enable these and other Cython arguments via the option CYTHON_FLAGS. See #518 and #519, thanks to @bdice for the improvement.target_link_libraries, via SKBUILD_LINK_LIBRARIES_KEYWORD (somewhat experimental). Thanks to @maxbachmann in #611.ninja package. This fixes repeated isolated builds. Further path inspection and updates for isolated builds may be considered in the future. #631, thanks to @RUrlus and @segevfiner for help in tracking this down.MACOSX_DEPLOYMENT_TARGET when building (automatic with cibuildwheel), otherwise you will get the same value Python was compiled with. Note: This may seem like a regression for PyPy until the next release (7.3.8), since it was compiled with 10.7, which is too old to build with on modern macOS - manually set MACOSX_DEPLOYMENT_TARGET (including setting it if unset in your setup.py) for PyPy until 7.3.8. #607The scikit-build GitHub organization welcomes henryiii and mayeut as core contributors and maintainers. Both are also maintainers of cibuildwheel.
The scikit-build GitHub organization welcomes henryiii and mayeut as core contributors and maintainers. Both are also maintainers of cibuildwheel.
@henryiii is a pybind11 and pypa/build maintainer, has been instrumental in adding Apple Silicon support, adding support for Visual Studio 2019, updating the Continuous Integration infrastructure, as well as helping review & integrate contributions, and addressing miscellaneous issues. Additionally, henryiii has worked on an example project to build with pybind11 and scikit-build.
@mayeut is a manylinux maintainer and focused his effort on updating the cmake-python-distributions and ninja-python-distributions so that the corresponding wheels are available on all supported platforms including Apple Silicon and all flavors of manylinux.
-A and -T internally when setting up MSVC generators. Architecture now always passed through -A to MSVC generators. Thanks @YannickJadoul for the contribution. See #557 and #536.CYTHON_FLAGS where needed, instead of once, allowing the user to define multiple modules with different flags. Thanks @oiffrig for the contributions in #536./make_a_release section./generators. Thanks @Eothred for the contributions in #508.The scikit-build GitHub organization welcomes {user}henryiii and {user}mayeut as core contributors and maintainers. Both are also maintainers of cibuildwheel.
{user}henryiii is a pybind11 and pypa/build maintainer, has been instrumental in adding Apple Silicon support, adding support for Visual Studio 2019, updating the Continuous Integration infrastructure, as well as helping review & integrate contributions, and addressing miscellaneous issues. Additionally, {user}henryiii has worked on an example project to build with pybind11 and scikit-build.
{user}mayeut is a manylinux maintainer and focused his effort on updating the cmake-python-distributions and ninja-python-distributions so that the corresponding wheels are available on all supported platforms including Apple Silicon and all flavors of manylinux.
530) and respecting standard setuptools cross-compile variables ({pr}555). Thanks to {user}YannickJadoul for the contributions.YannickJadoul for the contribution in {pr}526.-A and -T internally when setting up MSVC generators. Architecture now always passed through -A to MSVC generators. Thanks {user}YannickJadoul for the contribution. See {pr}557 and {pr}536.cmake_process_manifest_hook). Thanks {user}Jmennius for the contribution. See {pr}498.YannickJadoul for the contributions. See {pr}526.CYTHON_FLAGS where needed, instead of once, allowing the user to define multiple modules with different flags. Thanks {user}oiffrig for the contributions in {pr}536.dfaure for the contributions in {pr}522.Conda: Step-by-step release guide available in {doc}/make_a_release section./generators. Thanks {user}Eothred for the contributions in {pr}508.nox for running the tests locally. See {pr}540.549, {pr}551 and {pr}552.565.541.541.benbovy for the contributions. See {issue}494.mgorny for the contributions in {pr}544.See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-11-1
See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-11-1
distro<1.2.0 is required. Thanks {user}AntoinePrv and {user}Chrismarsh for reporting issues {issue}472 and {issue}488.Conda: Step-by-step release guide available in {doc}/make_a_release section.Support using scikit-build with conan where distro<1.2.0 is required. Thanks @AntoinePrv and @Chrismarsh for reporting issues #472 and #488 .
Fix link in Conda: Step-by-step release guide available in Making a release section.
Support using scikit-build with conan where distro<1.2.0 is required. Thanks AntoinePrv and Chrismarsh for reporting issues 472 and 488.
Fix link in Conda: Step-by-step release guide available in /make_a_release section.
See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-11-0
See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-11-0
setup() function. This can be used e.g. to prevent installing cmake configuration files, headers, or static libraries with the wheel. Thanks {user}SylvainCorlay for the contribution. See {issue}473.CMake configure options <usage_cmake_configure_options> like -DFOO:STRING:bar as global setuptools or pip options.407.jwoehr for the contribution. See {issue}444.native-api for the contribution. See {issue}443./cmake-modules/F2PY adding add_f2py_target() CMake function allowing to generate *-f2pywrappers.f and *module.c files from *.pyf files. Thanks {user}xoviat for the contribution./cmake-modules/PythonExtensions adding add_python_library() and add_python_extension(). Thanks {user}xoviat for the contribution.478.skbuild.cmaker.CMaker.check_for_bad_installs. Thanks {user}Nic30 for the suggestion. See {issue}429./cmake-modules/PythonExtensions:
383.EXT_SUFFIX config variable instead of deprecated SO variable. See {issue}381.MACOSX_DEPLOYMENT_TARGET environment variable if it is defined on macOS. Thanks {user}certik for the contribution. See {issue}441./cmake-modules/F2PY to ensure the f2py executable specific to the python version being used is found. See {issue}449. Thanks {user}bnavigator for the contribution.platform.linux_distribution() which was removed in Python 3.8 by a call to distro.id(). This adds the distro package as dependency. See {issue}458. Thanks {user}bnavigator for the contribution.For maintainers top-level category that includes a comparison between sysconfig and distutils.sysconfig modules.cmaker.py. See {issue}439. Thanks {user}isurufinitialize_git_repo_and_commit to prevent signing message on system with commit signing enabled globally.See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-10-0
See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-10-0
-- Trying "Ninja" generator, it now displays a message like -- Trying "Ninja (Visual Studio 15 2017 Win64 v140)" generator.setup.py --cmake-executable "C:/Program Files (x86)/cmake/cmake.exe" works as expected. Contributed by {user}jokva. See {issue}400.anibali. See {issue}401.bdist_egg or bdist_rpm commands trigger build using cmake.skbuild.constants.skbuild_plat_name() on macOS. See {issue}417.skbuild.platform_specifics.windows.find_visual_studio./cmake-modules/PythonExtensions. Thanks {user}eirrgang for the contribution./make_a_release section to include Conda: Step-by-step release guide.check_sdist_content() and fix tests that are checking content of sdist to account for changes introduced in Python 3.8 and backported to python 2.7, 3.6 and 3.7. The changes introduced in python/cpython#9419 adds directory entries to ZIP files created by distutils. Thanks {user}anibali for the contribution. See {issue}404.check_wheel_content() to consider changes in 0.33.1 < wheel.__version__ < 0.33.4 where directory entries are included when building wheel. See pypa/wheel#294.AssertionError raised in check_wheel_content() function by relocating the source code into a dedicated module tests.pytest_helpers and by adding a conftest.py configuration file registering it for pytest assertion rewriting. See https://docs.pytest.org/en/latest/writing_plugins.html#assertion-rewriting and {issue}403.test_generator_selection when building with "Visual C++ for Python 2.7" installed for all users. This addresses failure associated with win_c_compilervs2008cxx_compilervs2008python2.7 when running test in scikit-build-feedstock where "Visual C++ for Python 2.7" is installed using (vcpython27 chocolatey package.Improve message displayed when discovering a working environment for building projects. For example, instead of displaying -- Trying "Ninja" generator , it now displays a message like -- Trying "Ninja (Visual Studio 15 2017 Win64 v140)" generator .
Checking generator candidates can now handle handle paths and binaries with spaces, so that setup.py --cmake-executable "C:/Program Files (x86)/cmake/cmake.exe" works as expected. Contributed by @jokva . See #400 .
Fix sdist command to ensure symlinks in original source tree are maintained. Contributed by @anibali . See #401 .
Ensure use of bdist_egg or bdist_rpm commands trigger build using cmake.
Fix default value returned by skbuild.constants.skbuild_plat_name() on macOS. See #417 .
Add skbuild.platform_specifics.windows.find_visual_studio() .
Fix typo in example associated with PythonExtensions . Thanks @eirrgang for the contribution.
Update Making a release section to include Conda: Step-by-step release guide.
Introduce check_sdist_content() and fix tests that are checking content of sdist to account for changes introduced in Python 3.8 and backported to python 2.7, 3.6 and 3.7. The changes introduced in python/cpython#9419 adds directory entries to ZIP files created by distutils. Thanks @anibali for the contribution. See #404 .
Fix check_wheel_content() to consider changes in 0.33.1 < wheel.version < 0.33.4 where directory entries are included when building wheel. See pypa/wheel#294 .
Fix reporting of AssertionError raised in check_wheel_content() function by relocating the source code into a dedicated module tests.pytest_helpers and by adding a conftest.py configuration file registering it for pytest assertion rewriting. See https://docs.pytest.org/en/latest/writing_plugins.html#assertion-rewriting and #403 .
Fix test_generator_selection when building with “Visual C++ for Python 2.7” installed for all users. This addresses failure associated with win_c_compilervs2008cxx_compilervs2008python2.7 when running test in scikit-build-feedstock where “Visual C++ for Python 2.7” is installed using ( vcpython27 chocolatey package.
Continuous Integration
Add support for Azure Pipelines for Python 3.7 32-bit and 64-bit
AppVeyor: Disable test for Python 3.7 32-bit and 64-bit.
CircleCI: Update version of docker images from jessie to stretch. This addresses issue circleci/circleci-images#370 .
TravisCI: Remove obsolete Python 3.4 testing. It reached end-of-life on March 18 2019 .
See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-9-0
See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-9-0
ext_modules setup keyword along side skbuild based extensions. This means using build_ext command (and associated --inplace argument) is supported. Thanks {user}Erotemic for the contribution. See {issue}284.375. Thanks {user}padraic-padraic for the contribution.CMAKE_OSX_DEPLOYMENT_TARGET and CMAKE_OSX_ARCHITECTURES values are provided. Thanks {user}nonhermitian for the contribution. See {issue}377.setup.py. Thanks {user}mackelab for the contribution.See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-8-1
See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-8-1
bdist_wheel command to support wheel >= 0.32.0. Thanks {user}fbudin69500 for reporting issue {issue}360.test_distribution.py updating use of Path.files() and requiring path.py>=11.5.0.See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-8-0
See https://scikit-build.readthedocs.io/en/latest/changes.html#scikit-build-0-8-0
skbuild.constants.CMAKE_DEFAULT_EXECUTABLE to facilitate distribution of scikit-build in package manager like Nixpkgs where all paths to dependencies are hardcoded. Suggested by {user}FRidh.zip_safe option is set to False. Suggested by {user}blowekamp.--skip-generator-test when a generator is explicitly selected using --generator. This allows to speed up overall build when the build environment is known.setup.py directory. See {issue}335 fixed by {user}massich..cmake files having any character not available in CP-1252 (the default code page on windows). See {issue}334 fixed by {user}bgermann.--plat-name macosx-X.Y-x86_64 and -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=X.Y and ensure that the ones specified as command line arguments override the default values or the one hard-coded in the cmake_args setup keyword. Thanks {user}yonip for the help addressing {issue}342.package_dir has an ending slash. For example, specifying package_dir={'awesome': 'src/awesome/'}, is now properly handled.pip install -e . is called multiple times. See {issue}352.SteveJordanKW for the design work.CMake installation <installation_cmake> section. Thanks {user}thewtex.support_isolated_build section.optimized_incremental_build section.usage documentation <usage-setuptools_options> to specify that --universal and --python-tags have no effect. Thanks {user}bgermann for the suggestion. See {issue}353.Extension Build System section with the Advanced Usage section. Thanks {user}thewtex for the suggestion.check_wheel_content utility function.test_setup_requires_keyword_include_cmake if running in conda test environment or if https://pypi.org is not reachable. Suggested by {user}Luthaf.$<RUN_ENV> command wrapper. scikit-build should already take care of setting up the expected environment.versioning with python-versioneer and update {ref}making_a_release documentation.Fix description and classifier list in setup.py.
Support was removed following the deprecation warnings reported by version 0.31.0 of wheel package, these were causing the tests test_source_distribut…
CMakeCache.txt file, (2) introducing a CMake spec file storing the CMake version as well as the the CMake arguments and (3) re-configuring only if either the generator or the CMake specs change. Thanks @xoviat for the contribution. See #301.f2py executable for building Python extensions with Fortran. Thanks to @xoviat for moving forward with the integration. Concept for the module comes from the work of @scopatz done in PyNE project. See #273.NumPy_CONV_TEMPLATE_EXECUTABLE and NumPy_FROM_TEMPLATE_EXECUTABLE. Thanks @xoviat for the contribution. See #278.include_package_data and exclude_package_data setup keywords as well as parsing of MANIFEST.in. See #315. Thanks @reiver-dev for reporting the issue.cmake_minimum_required_version setup keyword. See #312. Suggested by @henryiii.setup_requires list. See #313. Suggested by @henryiii.--cmake-executable scikit-build command line option. Thanks @henryborchers for the suggestion. See #317._skbuild/platform-X.Y instead of _skbuild to build package. This allows to have a different build directory for each python version. Thanks @isuruf for the suggestion and @xoviat for contributing the feature. See #283.develop command when command test is executed.--hide-listing when building wheel.CYTHON_FLAGS when provided as command line arguments to the cython executable through CMake cache entries. See #265 fixed by @neok-m4700.setup() function using package_data keyword are packaged and installed.package_dir={'':'src'} in setup.py. Thanks @benjaminjack for reporting the issue. See #274.--skip-cmake command line option support so that it can re-generate a source distribution or a python wheel without having to run cmake executable to re-configure and build. Thanks to @jonwoodring for reporting the issue on the mailing list.skbuild <version> as wheel generator. See PEP-0427 and #191.MANIFEST.in is considered when generating source distribution. Thanks @seanlis for reporting the problem and providing an initial patch, and thanks @henryiii for implementing the corresponding test. See #260.--recurse-submodules option with ls-files command.test_source_distribution and test_wheel to fail.Speedup execution of tests that do not require any CMake language enabled. This is achieved by (1) introducing the test project hello-no-language, (2) updating test utility functions execute_setup_py and project_setup_py_test to accept the optional parameter disable_languages_test allowing to skip unneeded compiler detection in test project used to verify that the selected CMake generator works as expected, and (3) updating relevant tests to use the new test project and parameters.
Overall testing time on all continuous integration services was reduced:
distutils.msvc9compiler.query_vcvarsall (for Python 3.3 and 3.4) and distutils._msvccompiler._get_vc_env (for Python 3.5 and above). These functions were called multiple times to create the list of skbuild.platform_specifics.windows.CMakeVisualStudioCommandLineGenerator used in skbuild.platform_specifics.windows.WindowsPlatform.Update maximum line length specified in flake8 settings from 80 to 120 characters.
Add prepend_sys_path utility function.
Ensure that the project directory is prepended to sys.path when executing test building sample project with the help of execute_setup_py function.
Add codecov config file for better defaults and prevent associated Pull Request checks from reporting failure when coverage only slightly changes.
CMakeCache.txt file, (2) introducing a {func}CMake spec file <skbuild.constants.CMAKE_SPEC_FILE()> storing the CMake version as well as the the CMake arguments and (3) re-configuring only if either the generator or the CMake specs change. Thanks {user}xoviat for the contribution. See {issue}301./cmake-modules/PythonExtensions: Set symbol visibility to export only the module init function. This applies to GNU and MSVC compilers. Thanks {user}xoviat. See {issue}299./cmake-modules/F2PY useful to find the f2py executable for building Python extensions with Fortran. Thanks to {user}xoviat for moving forward with the integration. Concept for the module comes from the work of {user}scopatz done in PyNE project. See {issue}273./cmake-modules/NumPy setting variables NumPy_CONV_TEMPLATE_EXECUTABLE and NumPy_FROM_TEMPLATE_EXECUTABLE. Thanks {user}xoviat for the contribution. See {issue}278.cmake_languages <usage-cmake_languages> setup keyword.include_package_data and exclude_package_data setup keywords as well as parsing of MANIFEST.in. See {issue}315. Thanks {user}reiver-dev for reporting the issue.cmake_minimum_required_version setup keyword. See {issue}312. Suggested by {user}henryiii.setup_requires list. See {issue}313. Suggested by {user}henryiii.--cmake-executable scikit-build command line option. Thanks {user}henryborchers for the suggestion. See {issue}317._skbuild/platform-X.Y instead of _skbuild to build package. This allows to have a different build directory for each python version. Thanks {user}isuruf for the suggestion and {user}xoviat for contributing the feature. See {issue}283.develop command when command test is executed.--hide-listing when building wheel./cmake-modules/Cython: Fix escaping of spaces associated with CYTHON_FLAGS when provided as command line arguments to the cython executable through CMake cache entries. See {issue}265 fixed by {user}neok-m4700.setup() function using package_data keyword are packaged and installed.package_dir={'':'src'} in setup.py. Thanks {user}benjaminjack for reporting the issue. See {issue}274.--skip-cmake command line option support so that it can re-generate a source distribution or a python wheel without having to run cmake executable to re-configure and build. Thanks to {user}jonwoodring for reporting the issue on the mailing list.skbuild <version> as wheel generator. See PEP-0427 and {issue}191.MANIFEST.in is considered when generating source distribution. Thanks {user}seanlis for reporting the problem and providing an initial patch, and thanks {user}henryiii for implementing the corresponding test. See {issue}260.--recurse-submodules option with ls-files command.skbuild.cmaker.get_cmake_version.test_source_distribution and test_wheel to fail.Speedup execution of tests that do not require any CMake language enabled. This is achieved by (1) introducing the test project hello-no-language, (2) updating test utility functions execute_setup_py and project_setup_py_test to accept the optional parameter disable_languages_test allowing to skip unneeded compiler detection in test project used to verify that the selected CMake generator works as expected, and (3) updating relevant tests to use the new test project and parameters.
Overall testing time on all continuous integration services was reduced:
distutils.msvc9compiler.query_vcvarsall (for Python 3.3 and 3.4) and distutils._msvccompiler._get_vc_env (for Python 3.5 and above). These functions were called multiple times to create the list of {class}skbuild.platform_specifics.windows.CMakeVisualStudioCommandLineGenerator used in {class}skbuild.platform_specifics.windows.WindowsPlatform.Update maximum line length specified in flake8 settings from 80 to 120 characters.
Add prepend_sys_path utility function.
Ensure that the project directory is prepended to sys.path when executing test building sample project with the help of execute_setup_py function.
Add codecov config file for better defaults and prevent associated Pull Request checks from reporting failure when coverage only slightly changes.
skbuild.platform_specifics.windowsskbuild.commandskbuild.command.generate_source_manifestskbuild.utilsBasic Usage and Advanced Usage sections.Ensure CMake arguments passed to scikit-build and starting with -DCMAKE_* are passed to the test project allowing to determine which generator to use.
-DCMAKE_* are passed to the test project allowing to determine which generator to use. For example, this ensures that arguments like -DCMAKE_MAKE_PROGRAM:FILEPATH=/path/to/program are passed. See #256.README.rst with up-to-date pypi download statistics based on Google big table.Improve py_modules support: Python modules generated by CMake are now properly included in binary distribution.
py_modules support: Python modules generated by CMake are now properly included in binary distribution.py_modules generated by CMake.foo/__init__.py and a module fooConfig.py, and only package foo was listed in setup.py, fooConfig.py is not installed anymore.>=0.29.0 instead of ==0.29.0 will avoid uninstalling a newer version of wheel package on up-to-date system.test_hello, test_setup, and test_sdist_hide_listing to (1) check if python modules are packaged into source and wheel distributions and (2) check if python modules are copied into the source tree when developer mode is enabled.skbuild.setuptools_wrap.strip_package() to handle empty package.skbuild.command.build_py.build_py.find_modules() function to look for py_module file in CMAKE_INSTALL_DIR.skbuild.utils.PythonModuleFinder to search for python module in the CMake install tree.skbuild.setuptools_wrap._consolidate() to copy file into the CMake tree only if it exists.skbuild.setuptools_wrap._copy_file() to create directory only if there is one associated with the destination file.py_modules support: Python modules generated by CMake are now properly included in binary distribution.py_modules generated by CMake.foo/__init__.py and a module fooConfig.py, and only package foo was listed in setup.py, fooConfig.py is not installed anymore./cmake-modules/targetLinkLibrariesWithDynamicLookup: Fix the caching of dynamic lookup variables. See {issue}240 fixed by {user}blowekamp.thewtex, unpinning version of the package by requiring >=0.29.0 instead of ==0.29.0 will avoid uninstalling a newer version of wheel package on up-to-date system.CMake Options <usage_cmake_options> section to {doc}Usage <usage>.table <Visual Studio IDE> listing Visual Studio IDE version and corresponding with CPython version in {doc}/generators./make_a_release section.test_hello, test_setup, and test_sdist_hide_listing to
(1) check if python modules are packaged into source and wheel distributions and (2) check if python modules are copied into the source tree when developer mode is enabled.skbuild.setuptools_wrap.strip_package to handle empty package.skbuild.command.build_py.build_py.find_modules function to look for py_module file in CMAKE_INSTALL_DIR.skbuild.utils.PythonModuleFinder to search for python module in the CMake install tree.skbuild.setuptools_wrap._consolidate to copy file into the CMake tree only if it exists.skbuild.setuptools_wrap._copy_file to create directory only if there is one associated with the destination file.Ensure file copied in “develop” mode have “mode bits” maintained.
Improve user experience by running CMake only if needed. See #207
--force-cmake and --skip-cmake global setup command-line options.Ninja or NMake Makefiles generators are used.check_dynamic_lookup function:<LinkFlagsVar> is now optionalcheck_dynamic_lookup(<ResultVar>). See SimpleITK/SimpleITK#80.:issue:XYand :user:username markups. This functionality is enabled by the sphinx-issue sphinx extension==28.8.0 and require version >= 28.0.0. This allows to “play” nicely with conda where it is problematic to update the version of setuptools. See pypa/pip#2751 and ContinuumIO/anaconda-issues#542.get_cmakecache_variables utility function.skbuild.cmaker.CMaker.configure(): Change parameter name from generator_id to generator_name. This is consistent with how generator are identified in CMake documentation. This change breaks backward compatibility.skbuild.platform_specifics.abstract.CMakePlatform.get_best_generator(): Change parameter name from generato to generator_name. Note that this function is also directly importable from skbuild.platform_specifics. This change breaks backward compatibility.skbuild.platform_specifics.abstract.CMakeGenerator: This class allows to handle generators as sophisticated object instead of simple string. This is done anticipating the support for CMAKE_GENERATOR_PLATFORM and CMAKE_GENERATOR_TOOLSET. Note also that the class is directly importable from skbuild.platform_specifics and is now returned by skbuild.platform_specifics.get_best_generator(). This change breaks backward compatibility.207cmake_with_sdist <usage-cmake_with_sdist> setup keyword argument.--force-cmake and --skip-cmake global {ref}setup command-line options <usage-setuptools_options>.isuruf. See conda-forge/staged-recipes#1989187)./generators selection:
- If available, uses {ref}
Ninjabuild system generator on all platforms. An advantages is that ninja automatically parallelizes the build based on the number of CPUs.- Automatically set the expected
Visual Studioenvironment whenNinjaorNMake Makefilesgenerators are used.- Support Microsoft Visual C++ Compiler for Python 2.7. See {issue}
216.
27./cmake-modules/targetLinkLibrariesWithDynamicLookup CMake Module extending the API of check_dynamic_lookup function:
- Update long signature:
<LinkFlagsVar>is now optional- Add support for short signature:
check_dynamic_lookup(<ResultVar>). See SimpleITK/SimpleITK#80.
214 Thanks {user}isuruf for reporting the issue.119./generators section/history section{issue}`XY` and {user}`username` markups. This functionality is enabled by the sphinx-issue sphinx extension
- Add empty cross-compilation / wheels building sections
- Add {ref}
Why should I use scikit-build ? <why>- Add {ref}
Setup options <usage-setup_options>section
- Add {ref}
internal_apisection generated usingsphinx-apidoc.- Add {ref}
internal_cmake_modulesto document {doc}/cmake-modules/targetLinkLibrariesWithDynamicLookupCMake module.
mivade in {issue}212, remove the hard requirement for ==28.8.0 and require version >= 28.0.0. This allows to "play" nicely with conda where it is problematic to update the version of setuptools. See pypa/pip#2751 and ContinuumIO/anaconda-issues#542.isuruf for reporting the issue.get_cmakecache_variables utility function.skbuild.cmaker.CMaker.configure: Change parameter name from generator_id to generator_name. This is consistent with how generator are identified in CMake documentation. This change breaks backward compatibility.skbuild.platform_specifics.abstract.CMakePlatform.get_best_generator: Change parameter name from generator to generator_name. Note that this function is also directly importable from {mod}skbuild.platform_specifics. This change breaks backward compatibility.skbuild.platform_specifics.abstract.CMakeGenerator: This class allows to handle generators as sophisticated object instead of simple string. This is done anticipating the support for CMAKE_GENERATOR_PLATFORM and CMAKE_GENERATOR_TOOLSET. Note also that the class is directly importable from {mod}skbuild.platform_specifics and is now returned by {meth}skbuild.platform_specifics.get_best_generator. This change breaks backward compatibility.
- Remove unused "on_failure: event logging" and "notifications: GitHubPullRequest"
- Remove unused SKIP env variable
Do not package python modules under "purelib" dir in non-pure wheel
--hide-listing option
skbuild/resources/cmake/FindPythonExtensions.cmake
python_extension_module: add support for module suffixskbuild/resources/cmake/targetLinkLibrariesWithDynamicLookup.cmake:
coverage targetdocs-only target allowing to regenerator the Sphinx documentation without opening a new page
in the browser.Fix dispatch of arguments to setuptools, CMake and build tool
cmake_args: additional option passed to CMakecmake_install_dir: relative directory where the CMake project being built should be installedcmake_source_dir: location of the CMake projectpy_modules (6716723)FindNumPy.cmakepackage_dir to reasonable defaultsnose to py.testset_build_base_mixin and new_style
- a "pure" package is a python package that have all files living in the project source tree
- an "hybrid" package is a python package that have some files living in the project source tree and some files installed by CMake
- a "CMake" package is a python package that is fully generated and installed by CMake without any of his files existing in the source tree
84
cmake_args: additional option passed to CMakecmake_install_dir: relative directory where the CMake project being built should be installedcmake_source_dir: location of the CMake project
FindNumPy.cmakepackage_dir to reasonable defaults118106py_modules (6716723)nose to py.testset_build_base_mixin and new_styleNothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →