跳转到主要内容

改进的Python C/C++/Fortran/Cython扩展构建系统生成器

项目描述

scikit-build 是一个用于 CPython C/C++/Fortran/Cython 扩展的 Python 构建系统,它使用 CMake。

scikit-build 包本质上只是 setuptools Python 模块和 CMake 之间的粘合剂。

scikit-build 的下一代,scikit-build-core,目前正在开发中。它为 CMake 提供了一个简单、可靠的构建后端,不使用 setuptools,并提供了许多新功能。Scikit-build-core 还可以为基于 setuptools 的扩展系统供电,这最终将成为 scikit-build(经典)的后端。如果您不需要对构建过程进行大量自定义,您可以考虑尝试 scikit-build-core 而不是 scikit-build。

要开始使用,请参阅 此示例。有关更多示例,请参阅 scikit-build-sample-projects

Scikit-build 0.18.1

此版本修复了与 setuptools 74 相关的问题,并避免了来自 wheel 最近版本的警告。Android 和 iOS 现在包括在已知平台中。

错误修复

测试

Scikit-build 0.18.0

此版本将最低要求的 CMake 提高到 3.5,并支持 CPython 3.13。

错误修复

  • #1081 中支持 MSVC 17.10

  • #1095 中要求 CMake 3.5+

  • #1094 中支持 CPython 3.13 并修复了 windows lib 查找问题

  • #1073 中由 @mweinelt 修复了 PermissionError 期间的终止问题

  • #1032 中由 @hmaarrfk 删除了 cmakelists 文件中已弃用的 distutils 的使用

  • #1030 中由 @ZzEeKkAa 使用第一个可用的选项来处理 vswhere 输出

测试

  • #1087 中由 @s-t-e-v-e-n-k 在两个测试中支持 setuptools 69.3.0 的更改

  • #1092 中在几个地方使用 uv

Fedora CI

杂项

  • #1017 中清理了 pylint

  • #1082 中修复了 mypy 对新 setuptools 类型的类型忽略

  • 移动到Ruff格式,请参考#1035

  • 移除pkg_resources和测试命令,请参考#1014

  • Ruff迁移到astral-sh,请参考#1007

  • Black或Ruff不再需要目标版本,请参考#1008

  • 更新ruff并修复警告,请参考#1060

  • 使用2倍速度的黑镜,请参考#1021

  • 将dependabot更新分组,请参考#1054

  • macos-latest正在变为macos-14 ARM运行器,请参考#1083

  • 跳过win PyPy PEP 518,请参考#1091

Scikit-build 0.17.6

一个小修复版本,增加了新平台和更好的测试,包括CPython 3.12.0b1。

错误修复

  • @mtelka添加对SunOS的支持,请参考#983

  • @bhuntsman添加对AIX(与最近版本的CMake)的支持,请参考#988

测试

  • 测试现在在CPython 3.12.0b1上通过,请参考#879

  • 测试不再使用pytest-virtualenv,请参考#879

  • isolated标记现在包括test_distribution测试,请参考#879

  • 测试通过@keszybz避免错误的get_map匹配,请参考#990

  • Fedora测试修复由@LecrisUT#986#938中完成。

杂项

  • 文档改进,请参考#979

Scikit-build 0.17.5

一个小修复版本,修复了传递生成器特定参数的问题。这修复了一些Ninja生成器被找到但无法构建的情况。NetBSD报告称可以工作,因此已添加到支持的BSD列表中。

错误修复

  • 实际编译中缺少生成器参数,请参考#975

  • 添加对netbsd和pyodide(未来)的支持,请参考#977

Scikit-build 0.17.4

对0.17.3问题的后续修复。我们现在有了手动测试下游包的方法。

错误修复

  • 确保即使库不存在,也能找到包含目录,请参考#974

Scikit-build 0.17.3

一个小版本,与0.17.2中PYTHON_LIBRARY处理更改相关;scikit-build 0.17.3如果不存在Python库(例如在manylinux上),则从get_python_library返回空字符串,而0.17.2返回None,而早期版本返回一个不存在的路径。请注意,将REQUIRED添加到find_package(PythonLibs将失败,这是不正确的(你不应该链接到libPython.so)并且实际上是之前注入了一个不存在的路径。

错误修复

  • 如果Python库不存在,现在保持get_python_library返回类型字符串,请参考#959

  • 如果通过FindPythonExtensions找不到库,则避免“找不到”警告,请参考#960

  • FindNumPy 不应调用 FindPythonLibs 在 #958

Scikit-build 0.17.2

另一个针对非MSVC Windows平台的微小版本更新,包含了一些修复。

错误修复

  • @LecrisUT#937 中修复了 RPM 规范。

  • 在返回库路径之前通过 @dlech 验证值,在 #942 中。

  • 仅在 Windows MSVC 上添加 Python_LIBRARY,在 #943#944 中。

  • #947 中为失败的编译器提供更友好的跟踪信息。

测试

  • #948 中隐藏了一些预期的警告。

Scikit-build 0.17.1

这是一个小版本更新,修复了一些错误;主要是一个可能导致旧版 FindPython 出现错误的更改。为了简化输出,已经停用了未使用的变量消息。

错误修复

  • 旧版本(<3.24)的 CMake 在 #932 中当指定了库时会中断。

  • #931 中缺少了错误输出的格式化。

  • #934 中将空白的 CMAKE_OSX_DEPLOYMENT_TARGET 转换为警告(已修复 conda-forge 的 clang 激活中的上游错误)。

  • #930 中删除未使用的变量警告。

测试

  • @LecrisUT#928 中添加了 Fedora 打包,并使用 packit 自动化。

  • @LecrisUT#929 中修复了 codecov ci。

  • #933 中更新了一些覆盖率设置。

Scikit-build 0.17.0

本版本包含大量错误修复,重点在于 Windows、PyPy 和交叉编译。我们还稍微提高了与默认 setuptools 行为的兼容性,并启用了一些以前不可用的功能,例如通过 cmake 参数环境变量覆盖构建类型。我们扩展了 CI 矩阵,包括 Windows 和 macOS PyPy 以及 Linux 上的某些 Fortran 测试。本版本要求 Python 3.7+。

错误修复

  • 通过 @vyasr#873 中匹配 include_package_data 的默认 setuptools 行为。

  • @benbovy#495 中对 F2PY 和 PythonExtensions 模块进行了杂项修复。

  • 如果用户提供了 CMAKE_INSTALL_PREFIX,通过 @vyasr#872 中提供更有用的错误。

  • 通过 @vyasr#871 中停止假设 .pyx 文件与 CMakeLists.txt 在同一目录中。

  • #902 中允许覆盖构建类型。

  • 通过用户 gershnik#904 中正确检测 Windows 上的 PyPy 库。

  • #913 中包含 FindPython 的库以更好地进行 Windows 交叉编译。感谢用户 maxbachmann 进行测试。

  • 通过 @dlech#917 中修复了在 Windows 上为 ARM 进行交叉编译时的默认生成器逻辑。

  • 如果存在,在 #877 中使用 f2py 的 get_include

  • 通过 @erykoff#901 中使用 targetLinkLibrariesWithDynamicLookup 修复了交叉编译异常的支持。

  • 将空的 MACOSX_DEPLOYMENT_TARGET 视为未设置,如在 #918 中所述。

测试

  • @benbovy 添加 hello fortran 示例包和测试,在 #493 中。

  • #906 中添加 sdist 检查和修复。

  • #888 中修复一些 setuptools 类型。

  • #907 中将 PyPy Win 和 macOS 添加到 CI。

  • #922 中添加 Python 3.12 Linux alphas 的测试。

杂项

  • #862 中删除 Python 3.6。

  • 将构建后端移至 hatchling,在 #870 中。

  • #899 中避免修改函数输入参数。

  • #869 中使用 _compat/typing 名称。

出版物

在科学出版物中引用 scikit-build 时,请使用第一条引用。

  • Jean-Christophe Fillion-Robin, Matt McCormick, Omar Padron, Max Smolens, Michael Grauer, & Michael Sarahan. (2018, July 13). jcfr/scipy_2018_scikit-build_talk: SciPy 2018 Talk | scikit-build: A Build System Generator for CPython C/C++/Fortran/Cython Extensions. Zenodo. https://doi.org/10.5281/zenodo.2565368

  • Schreiner, Henry, Rickerby, Joe, Grosse-Kunstleve, Ralf, Jakob, Wenzel, Darbois, Matthieu, Gokaslan, Aaron, Fillion-Robin, Jean-Christophe, & McCormick, Matt. (2022, August 1). Building Binary Extensions with pybind11, scikit-build, and cibuildwheel. https://doi.org/10.25080/majora-212e5952-033

历史

PyCMake 是在 2014 年的 SciPy 大会上创建的,以解决跨平台构建基于 C++ 和 Fortran 的 Python 扩展的普遍困难。它在 2016 年更名为“scikit-build”。Scikit-build-core 于 2022 年开始。

已知问题

这些问题可能在即将发布的版本中得到解决,并且在 scikit-build-core 中已经得到解决。

  • 可编辑的安装与最新版本的 Setuptools 不兼容(并且与较旧版本也存在问题)。

  • 目前,scikit-build关心的配置必须在 setup() 中指定。

  • 在某些情况下(如使用不同的 Python 解释器重新构建),可能需要在构建之间删除缓存目录(_skbuild)。

  • AIX 需要一个比 AIX Toolbox for Open Source Software 中提供的 IBM CMake 3.22.0 更新的 CMake 版本。我们目前建议在 AIX 上从源代码构建 CMake。

我们还在努力改进 scikit-build,因此有一些即将到来的更改和弃用。

  • 所有已弃用的 setuptools/distutils 功能在 scikit-build 中也已弃用,例如 test 命令、easy_install 等。

  • 不推荐使用较旧的 CMake 版本(<3.15);未来版本将移除对较旧 CMake 的支持(并提供更好的机制以确保可获取适当的 CMake)。

如果您需要这些功能中的任何一项,请打开或查找一个说明您需要什么以及为什么需要它的 issue。

杂项

本工作的支持由 NSF 奖助金 OAC-2209877 提供。

项目详情


下载文件

下载适用于您平台文件的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码发行版

scikit_build-0.18.1.tar.gz (274.2 kB 查看散列值)

上传时间 源代码

构建发行版

scikit_build-0.18.1-py3-none-any.whl (85.6 kB 查看散列值)

上传时间 Python 3

支持者