跳转到主要内容

CMake构建Cython模块的辅助工具

项目描述

cython-cmake

Actions Status

PyPI version PyPI platforms

此工具提供使用Cython的辅助功能。使用

find_package(Cython MODULE REQUIRED VERSION 3.0)
include(UseCython)

如果您先找到Python,搜索会考虑这一点。您可以在CMake 3.19+上指定版本范围。这将定义一个Cython::Cython目标(以及匹配的CYTHON_EXECUTABLE变量)。它还将提供以下辅助函数

cython_transpile(<pyx_file>
                 [LANGUAGE C | CXX]
                 [CYTHON_ARGS <args> ...]
                 [OUTPUT <OutputFile>]
                 [OUTPUT_VARIABLE <OutputVariable>]
                 )

此函数接受一个pyx文件,并在当前二进制目录(可以通过OUTPUT指定确切路径)中创建一个匹配的.c / .cxx文件。如果提供了,将生成文件的路径存储在由OUTPUT_VARIABLE指定的变量中。可以使用CYTHON_ARGS提供Cython可执行文件的额外参数,如果没有设置,则从CYTHON_ARGS变量中获取默认值。

如果没有指定LANGUAGE,且全局启用了CCXX,那么将尝试从源文件中的# distutils: language=...注释中推断语言,如果未找到,则使用C。

此实用程序依赖于CMake 3.7中为Ninja引入的DEPFILE功能,并在CMake 3.20中添加到Make,在CMake 3.21中添加到Visual Studio和Xcode。

示例

find_package(
  Python
  COMPONENTS Interpreter Development.Module
  REQUIRED)
find_package(Cython MODULE REQUIRED)

cython_transpile(simple.pyx LANGUAGE C OUTPUT_VARIABLE simple_c)

python_add_library(simple MODULE "${simple_c}" WITH_SOABI)

scikit-build-core

要使用此包与scikit-build-core一起使用,您需要将其包含在您的构建需求中。

[build-system]
requires = ["scikit-build-core", "cython", "cython-cmake"]
build-backend = "scikit_build_core.build"

还建议要求CMake 3.21。

[tool.scikit-build]
cmake.version = ">=3.21"

供应商

您也可以将FindCython和/或UseCython供应商到您的包中。这样可以避免在构建时需要依赖项,并保护您免受此包更改的影响,代价是需要手动重新供应商以获取错误修复和/或改进。此机制也非常适合您想要在scikit-build-core之外直接构建的情况。

您应该创建一个CMake辅助目录,例如cmake。将此目录添加到您的CMakeLists.txt中,如下所示

list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

然后,您可以将我们的文件供应商到该文件夹

pipx run cython-cmake vendor cmake

如果您只想供应商两个文件中的一个,请使用--member FindCython--member UseCython。您可以重新运行此命令以重新供应商。目录必须已存在。

项目详情


下载文件

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

源分发

cython_cmake-0.2.0.tar.gz (22.1 kB 查看散列)

上传时间:

构建分发

cython_cmake-0.2.0-py3-none-any.whl (19.0 kB 查看散列)

上传时间: Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面