FindPython2

3.12 版本新增。

查找 Python 2 解释器、编译器和开发环境(包含目录和库)。

find_package(Python2 [<version>] [COMPONENTS <components>...] [...])

在版本 3.19 中添加: 当请求版本时,可以指定为简单值或范围。有关版本范围用法和功能的详细说明,请参阅 find_package() 命令。

支持以下组件

  • Interpreter: 搜索 Python 2 解释器。

  • Compiler: 搜索 Python 2 编译器。仅由 IronPython 提供。

  • Development: 搜索开发工件(包含目录和库)。

    3.18 版新增:此组件包含两个子组件,可以独立指定

    • Development.Module: 搜索用于 Python 2 模块开发的工件。

    • Development.Embed: 搜索用于 Python 2 嵌入式开发的工件。

在版本 3.14 中添加

  • NumPy:查找 NumPy 的包含目录。指定此组件也意味着指定 InterpreterDevelopment.Module 组件。

在版本 4.2 中更改: 当策略 CMP0201 设置为 NEW 时,Development.Module 组件不再被默认包含。

如果未指定 COMPONENTS,则假定为 Interpreter

如果指定了 Development 组件,则它会包含子组件 Development.ModuleDevelopment.Embed

在版本 4.1 中更改: 在交叉编译模式下(即 CMAKE_CROSSCOMPILING 变量被定义为 true),当策略 CMP0190 设置为 NEW 时,以下约束适用于请求的组件:

  • InterpreterCompiler 单独:将搜索主机工件。

  • InterpreterCompiler 搭配 Development 或任何子组件:将查找目标构件。在这种情况下,必须定义 CMAKE_CROSSCOMPILING_EMULATOR 变量,并使用它来执行解释器或编译器。

当同时需要主机和目标构件时,应两次调用 find_package() 命令。在这种情况下,Python_ARTIFACTS_PREFIX 变量可能很有用。

为确保 InterpreterCompilerDevelopment(或其任何子组件)和 NumPy 组件之间版本的一致性,请同时指定所有组件。

find_package (Python2 COMPONENTS Interpreter Development)

此模块仅查找 Python 2 版本。此模块可以与 FindPython3 模块同时使用,以便使用两个 Python 版本。

如果 Python 版本对您不重要,可以使用 FindPython 模块。

注意

如果同时指定了 InterpreterDevelopment(或其子组件)组件,则此模块仅查找与 CMake 配置定义的平台架构相同的解释器。如果仅指定了 Interpreter 组件,则此限制不适用。

导入的目标

此模块提供以下 导入目标

在版本 3.14 中更改: 仅当 CMAKE_ROLEPROJECT 时,才会创建 导入的目标

Python2::Interpreter

Python 2 解释器。仅当找到 Interpreter 组件时,才会定义此目标。

Python2::InterpreterDebug

3.30 版本新增。

Python 2 调试解释器。仅当找到 Interpreter 组件且定义了 Python2_EXECUTABLE_DEBUG 变量时,才会定义此目标。此目标仅在 Windows 平台上定义。

Python2::InterpreterMultiConfig

3.30 版本新增。

Python 2 解释器。将使用解释器的发布版本或调试版本,具体取决于上下文(平台、配置)。仅当找到 Interpreter 组件时,才会定义此目标。

Python2::Compiler

Python 2 编译器。仅当找到 Compiler 组件时,才会定义此目标。

Python2::Module

版本 3.15 新增。

用于 Python 模块的 Python 2 库。当找到 Development.Module 组件时,将定义此目标。

Python2::Python

用于 Python 嵌入的 Python 2 库。当找到 Development.Embed 组件时,将定义此目标。

Python2::NumPy

3.14 版新增。

Python 2 的 NumPy 库。当找到 NumPy 组件时,将定义此目标。此外,此目标具有 Python2::Module 目标作为依赖项。

在版本 4.2 中更改: 当策略 CMP0201 设置为 NEW 时,此目标不再具有 Python2::Module 目标作为依赖项。

结果变量

此模块定义了以下变量(请参阅 标准变量名

Python2_FOUND

一个布尔值,指示系统是否具有请求的 Python 2 组件。

Python2_Interpreter_FOUND

一个布尔值,指示系统是否具有 Python 2 解释器。

Python2_EXECUTABLE

Python 2 解释器的路径。

Python2_EXECUTABLE_DEBUG

3.30 版本新增。

调试 Python 2 解释器的路径。仅在 Windows 平台上定义。

Python2_INTERPRETER

3.30 版本新增。

Python 2 解释器的路径,定义为 生成器表达式,该表达式根据上下文(平台、配置)选择 Python2_EXECUTABLEPython2_EXECUTABLE_DEBUG 变量。

Python2_INTERPRETER_ID
一个解释器独有的短字符串。可能的值包括
  • Python

  • ActivePython

  • Anaconda

  • Canopy

  • IronPython

  • PyPy

Python2_STDLIB

标准平台独立安装目录。

sysconfig.get_path('stdlib')distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=True) 返回的信息。

Python2_STDARCH

标准平台相关安装目录。

sysconfig.get_path('platstdlib')distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=True) 返回的信息。

Python2_SITELIB

第三方平台独立安装目录。

sysconfig.get_path('purelib')distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=False) 返回的信息。

Python2_SITEARCH

第三方平台相关安装目录。

sysconfig.get_path('platlib')distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=False) 返回的信息。

Python2_Compiler_FOUND

一个布尔值,指示系统是否具有 Python 2 编译器。

Python2_COMPILER

Python 2 编译器的路径。仅由 IronPython 提供。

Python2_COMPILER_ID
一个编译器独有的短字符串。可能的值包括
  • IronPython

Python2_DOTNET_LAUNCHER

在 3.18 版本中新增。

.Net 解释器。仅由 IronPython 实现使用。

Python2_Development_FOUND

一个布尔值,指示系统是否具有 Python 2 开发工件。

Python2_Development.Module_FOUND

在 3.18 版本中新增。

一个布尔值,指示系统是否具有用于 Python 模块的 Python 2 开发工件。

Python2_Development.Embed_FOUND

在 3.18 版本中新增。

一个布尔值,指示系统是否具有用于 Python 嵌入的 Python 2 开发工件。

Python2_INCLUDE_DIRS

Python 2 包含目录。

Python2_DEBUG_POSTFIX

3.30 版本新增。

调试 Python 模块的后缀。此变量可用于定义 DEBUG_POSTFIX 目标属性。

Python2_LINK_OPTIONS

3.19 版本新增。

Python 2 链接选项。某些配置需要特定的链接选项才能正确构建和执行。

Python2_LIBRARIES

Python 2 库。

Python2_LIBRARY_DIRS

Python 2 库目录。

Python2_RUNTIME_LIBRARY_DIRS

Python 2 运行时库目录。

Python2_VERSION

Python 2 版本。

Python2_VERSION_MAJOR

Python 2 主版本。

Python2_VERSION_MINOR

Python 2 次版本。

Python2_VERSION_PATCH

Python 2 补丁版本。

Python2_PyPy_VERSION

在 3.18 版本中新增。

Python 2 PyPy 版本。

Python2_NumPy_FOUND

3.14 版新增。

布尔值,指示系统是否拥有 NumPy。

Python2_NumPy_INCLUDE_DIRS

3.14 版新增。

NumPy 包含目录。

Python2_NumPy_VERSION

3.14 版新增。

NumPy 版本。

提示

Python2_ROOT_DIR

定义 Python 2 安装的根目录。

Python2_USE_STATIC_LIBS
  • 如果未定义,则按此顺序搜索共享库和静态库。

  • 如果设置为 TRUE,则 搜索静态库。

  • 如果设置为 FALSE,则 搜索共享库。

注意

此提示在 Windows 上将被忽略,因为此平台上不可用静态库。

Python2_FIND_STRATEGY

版本 3.15 新增。

此变量定义了查找方式。可以将 Python2_FIND_STRATEGY 变量设置为以下之一:

  • VERSION:尝试在所有指定位置查找最新版本。如果策略 CMP0094 未定义或设置为 OLD,则为默认值。

  • LOCATION:一旦找到满足版本约束的版本,就停止查找。如果策略 CMP0094 设置为 NEW,则为默认值。

另请参阅 Python2_FIND_UNVERSIONED_NAMES

Python2_FIND_REGISTRY

3.13 版本新增。

在 Windows 上,Python2_FIND_REGISTRY 变量决定了注册表和环境变量之间的首选顺序。可以将 Python2_FIND_REGISTRY 变量设置为以下之一:

  • FIRST: 尝试在环境变量之前使用注册表。这是默认值。

  • LAST: 尝试在环境变量之后使用注册表。

  • NEVER: 从不尝试使用注册表。

Python2_FIND_FRAMEWORK

版本 3.15 新增。

在 macOS 上,Python2_FIND_FRAMEWORK 变量决定了 Apple 风格和 Unix 风格的软件包组件之间的首选顺序。此变量可以采用与 CMAKE_FIND_FRAMEWORK 变量相同的值。

注意

不支持值 ONLY,因此将使用 FIRST 代替。

如果未定义 Python2_FIND_FRAMEWORK,则将使用 CMAKE_FIND_FRAMEWORK 变量(如果存在)。

Python2_FIND_VIRTUALENV

版本 3.15 新增。

此变量定义了对由 virtualenvconda 管理的虚拟环境的处理。仅当激活了虚拟环境(即已评估 activate 脚本)时,此变量才有意义。在这种情况下,它优先于 Python2_FIND_REGISTRYCMAKE_FIND_FRAMEWORK 变量。可以将 Python2_FIND_VIRTUALENV 变量设置为以下之一:

  • FIRST: 虚拟环境优先于任何其他标准路径用于查找解释器。这是默认值。

  • ONLY: 仅使用虚拟环境查找解释器。

  • STANDARD: 不使用虚拟环境来查找解释器,但始终考虑 PATH 环境变量。在这种情况下,可以将 Python2_FIND_REGISTRY(Windows)或 CMAKE_FIND_FRAMEWORK(macOS)变量设置为 LASTNEVER,以便优先选择虚拟环境中的解释器。

3.17 版新增: 添加了对 conda 环境的支持。

注意

如果请求了 Development 组件(或其子组件)但未找到,或返回了错误的构件,则同时包含 Interpreter 组件也可能有所帮助。

Python2_FIND_IMPLEMENTATIONS

在 3.18 版本中新增。

此变量以有序列表的形式定义将搜索的不同实现。 Python2_FIND_IMPLEMENTATIONS 变量可以包含以下值:

  • CPython:这是标准实现。各种产品,如 AnacondaActivePython,都基于此实现。

  • IronPython:此实现使用 CSharp 语言为 .NET Framework 提供支持,建立在 Dynamic Language RuntimeDLR)之上。请参阅 IronPython

  • PyPy:此实现使用 RPython 语言和 RPython translation toolchain 来生成 Python 解释器。请参阅 PyPy

默认值为

  • Windows 平台:CPythonIronPython

  • 其他平台:CPython

注意

此提示具有所有提示中最低的优先级,因此即使您首先指定了 IronPython,然后在第二个指定了 CPython,仍然可以选择基于 CPython 的 Python 产品,因为例如使用 Python2_FIND_STRATEGY=LOCATION 时,每个位置将首先搜索 IronPython,然后搜索 CPython

注意

当指定 IronPython 时,在 Windows 平台以外的平台上,假定 .Net 解释器(即 mono 命令)可通过 PATH 变量获得。

Python2_FIND_UNVERSIONED_NAMES

在 3.20 版本中添加。

此变量定义了通用名称的搜索方式。目前,它仅适用于解释器的通用名称,即 python2python。可以将 Python2_FIND_UNVERSIONED_NAMES 变量设置为以下值之一:

  • FIRST: 通用名称将在更专门的名称(例如 python2.5)之前进行搜索。

  • LAST: 在更专业的名称之后搜索通用名称。这是默认值。

  • NEVER: 完全不搜索通用名称。

另请参阅 Python2_FIND_STRATEGY

工件规范

3.16 版新增。

为了解决特殊情况,可以通过设置以下变量直接指定工件

Python2_EXECUTABLE

解释器的路径。

Python2_COMPILER

编译器的路径。

Python2_DOTNET_LAUNCHER

在 3.18 版本中新增。

.Net 解释器。仅由 IronPython 实现使用。

Python2_LIBRARY

库的路径。它将用于计算变量 Python2_LIBRARIESPython2_LIBRARY_DIRSPython2_RUNTIME_LIBRARY_DIRS

Python2_INCLUDE_DIR

Python 头文件目录的路径。它将用于计算变量 Python2_INCLUDE_DIRS

Python2_NumPy_INCLUDE_DIR

NumPy 头文件目录的路径。它将用于计算变量 Python2_NumPy_INCLUDE_DIRS

注意

所有路径必须是绝对路径。任何以相对路径指定的工件都将被忽略。

注意

当指定工件时,所有 HINTS 都将被忽略,并且不会为此工件执行搜索。

如果指定了多个工件,则用户有责任确保各种工件的一致性。

默认情况下,此模块支持在项目不同目录中进行多次调用,并具有不同的版本/组件要求,同时为每次调用提供正确且一致的结果。为支持此行为,CMake 缓存未以传统方式使用,这可能对交互式规范造成问题。因此,为也支持交互式规范,模块行为可以通过以下变量进行控制:

Python2_ARTIFACTS_INTERACTIVE

在 3.18 版本中新增。

选择模块的行为。这是一个布尔变量

  • 如果设置为 TRUE:为上述构件规范变量创建 CMake 缓存条目,以便用户可以对其进行交互式编辑。这将禁用对多个版本/组件要求的同时支持。

  • 如果设置为 FALSE 或未定义: 启用多个版本/组件要求。

Python2_ARTIFACTS_PREFIX

4.0 版本新增。

定义一个自定义前缀,将用于定义所有结果变量、目标和命令。通过使用此变量,此模块支持在同一目录中进行多次调用,并具有不同的版本/组件要求。例如,在交叉编译的情况下,需要开发组件,但也可以需要本地 Python 解释器。

find_package(Python2 COMPONENTS Development)

set(Python2_ARTIFACTS_PREFIX "_HOST")
find_package(Python2 COMPONENTS Interpreter)

# Here Python2_HOST_EXECUTABLE and Python2_HOST::Interpreter artifacts are defined

注意

为与模块的标准行为保持一致,每次调用 find_package() 命令时,也会定义各种标准的 _FOUND 变量(即没有自定义前缀)。

命令

此模块定义了 Python2_add_library 命令(当 CMAKE_ROLEPROJECT 时),该命令具有与 add_library() 相同的语义,并添加了对目标 Python2::Python 的依赖,或者在库类型为 MODULE 时,添加了对目标 Python2::Module 的依赖,并负责 Python 模块命名规则。

Python2_add_library (<name> [STATIC | SHARED | MODULE]
                     <source1> [<source2> ...])

如果未指定库类型,则假定为 MODULE

在版本 3.30 中添加: 对于 MODULE 类型,如果定义了 Python2_DEBUG_POSTFIX 变量,则 DEBUG_POSTFIX 目标属性将使用该变量的值进行初始化。