FindPython2

从版本 3.12 中添加。

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

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

支持以下组件

  • Interpreter:搜索 Python 2 解释器

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

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

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

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

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

  • NumPy:搜索 NumPy 包含目录。

3.14 版中新增: 添加了 NumPy 组件。

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

如果指定了 Development 组件,则这意味着子组件 Development.ModuleDevelopment.Embed

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

find_package (Python2 COMPONENTS Interpreter Development)

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

FindPython 模块在 Python 版本对你来说不重要时可以使用。

请注意

如果同时指定组件 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_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 变量的 generator expression基于上下文(平台、配置)。

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 include 目录。

Python2_DEBUG_POSTFIX

调试 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 include 目录。

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 Runtime (DLR)。请参阅 IronPython

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

默认值为

  • Windows 平台:CPython, IronPython

  • 其他平台:CPython

请注意

此提示的优先级是所有提示中最低的,因此即使您指定了 IronPython 在第一位而 CPython 在第二位,基于 CPython 的 Python 产品仍可能被选中,例如使用 Python2_FIND_STRATEGY=LOCATION 时,每个位置都会先搜索 IronPython 再搜索 CPython

请注意

IronPython 指定为 Windows 以外の平台时,希望通过 PATH 变量可以使用 .Net 解释器(即 mono 命令)。

Python2_FIND_UNVERSIONED_NAMES

在 3.20 版中添加。

此变量定义了如何搜索泛型名称。目前,它仅应用于解释器的泛型名称,即 python2pythonPython2_FIND_UNVERSIONED_NAMES 变量可以设置为以下值之一

  • FIRST:泛型名称在更专业的名称(例如 python2.5)之前搜索。

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

  • NEVER:根本不搜索泛型名称。

另请参阅 Python2_FIND_STRATEGY

Artifact 规范

在 3.16 版中添加。

要解决特殊情况,可以通过设置以下变量直接指定 Artifact

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_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 目标属性将通过其值进行初始化。