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 兩個版本。

如果 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_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 Runtime (DLR)。 請參閱 IronPython

  • PyPy:此實作使用 RPython 語言和 RPython 轉換 工具鏈 來產生 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 新增。

此變數定義了將如何搜尋通用名稱。 目前,它僅適用於直譯器的通用名稱,即 python2pythonPython2_FIND_UNVERSIONED_NAMES 變數可以設定為以下值之一

  • FIRST:在搜尋更專業的名稱(例如 python2.5)之前,先搜尋通用名稱。

  • LAST:在搜尋更專業的名稱之後,再搜尋通用名稱。 這是預設值。

  • NEVER:完全不搜尋通用名稱。

另請參閱 Python2_FIND_STRATEGY

產物規格

版本 3.16 新增。

為了處理特殊情況,可以直接透過設定以下變數來指定產物

Python2_EXECUTABLE

Python2_EXECUTABLE

Python2_COMPILER

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

注意

為了與模組的標準行為保持一致,各種標準 _FOUND 變數(即沒有自訂前綴)也由對 find_package() 命令的每次呼叫定義。

命令

此模組定義了命令 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 類型,如果定義了 DEBUG_POSTFIX 目標屬性,則使用 Python2_DEBUG_POSTFIX 變數的值初始化。