FindPython

於版本 3.12 加入。

尋找 Python 直譯器、編譯器和開發環境(包含目錄和函式庫)。

於版本 3.19 加入:當請求特定版本時,可以指定為簡單值或範圍。關於版本範圍的使用方式與功能的詳細說明,請參考 find_package() 命令。

支援以下組件

  • Interpreter:搜尋 Python 直譯器。

  • Compiler:搜尋 Python 編譯器。僅 IronPython 提供。

  • Development:搜尋開發成品(包含目錄和函式庫)。

    於版本 3.18 加入:此組件包含兩個可獨立指定的子組件

    • Development.Module:搜尋 Python 模組開發所需的成品。

    • Development.Embed:搜尋 Python 嵌入式開發所需的成品。

    於版本 3.26 加入

  • NumPy:搜尋 NumPy 包含目錄。

於版本 3.14 加入:新增 NumPy 組件。

如果未指定 COMPONENTS,則會假設為 Interpreter

如果指定了 Development 組件,則表示子組件 Development.ModuleDevelopment.Embed

為了確保 InterpreterCompilerDevelopment(或其子組件之一)和 NumPy 組件之間的版本一致,請同時指定所有組件。

find_package (Python COMPONENTS Interpreter Development)

此模組優先尋找 Python 3 版本。如果找不到,則會搜尋版本 2。為了管理 Python 3 和 2 的並行版本,請使用 FindPython3FindPython2 模組,而不是此模組。

注意

如果同時指定了 InterpreterDevelopment(或其子組件之一)組件,此模組僅會搜尋與 CMake 組態定義的平台架構相同的直譯器。如果僅指定 Interpreter 組件,則此限制不適用。

匯入目標

此模組定義了以下匯入目標

於版本 3.14 變更:只有當 CMAKE_ROLEPROJECT 時,才會建立 匯入目標

Python::Interpreter

Python 直譯器。只有在找到 Interpreter 組件時才會定義此目標。

Python::InterpreterDebug

於版本 3.30 加入。

Python 除錯直譯器。只有在找到 Interpreter 組件且定義了 Python_EXECUTABLE_DEBUG 變數時才會定義此目標。此目標僅在 Windows 平台上定義。

Python::InterpreterMultiConfig

於版本 3.30 加入。

Python 直譯器。將根據上下文(平台、組態)使用直譯器的發行版或除錯版。只有在找到 Interpreter 組件時才會定義此目標。

Python::Compiler

Python 編譯器。只有在找到 Compiler 組件時才會定義此目標。

Python::Module

於版本 3.15 加入。

適用於 Python 模組的 Python 函式庫。如果找到 Development.Module 組件,則會定義此目標。

Python::SABIModule

於版本 3.26 加入。

使用穩定應用程式二進位介面的 Python 模組的 Python 函式庫。如果找到 Development.SABIModule 組件,則會定義此目標。

Python::Python

適用於 Python 嵌入的 Python 函式庫。如果找到 Development.Embed 組件,則會定義此目標。

Python::NumPy

於版本 3.14 加入。

NumPy Python 函式庫。如果找到 NumPy 組件,則會定義此目標。

結果變數

此模組將在您的專案中設定以下變數(請參閱 標準變數名稱

Python_FOUND

系統具有請求的 Python 組件。

Python_Interpreter_FOUND

系統具有 Python 直譯器。

Python_EXECUTABLE

Python 直譯器的路徑。

Python_EXECUTABLE_DEBUG

於版本 3.30 加入。

除錯 Python 直譯器的路徑。僅在 Windows 平台上定義。

Python_INTERPRETER

於版本 3.30 加入。

Python 直譯器的路徑,定義為 產生器 運算式,根據上下文(平台、組態)選取 Python_EXECUTABLEPython_EXECUTABLE_DEBUG 變數。

Python_INTERPRETER_ID
直譯器獨有的簡短字串。可能的值包括
  • Python

  • ActivePython

  • Anaconda

  • Canopy

  • IronPython

  • PyPy

Python_STDLIB

標準平台獨立安裝目錄。

sysconfig.get_path('stdlib') 傳回的資訊。

Python_STDARCH

標準平台相依安裝目錄。

sysconfig.get_path('platstdlib') 傳回的資訊。

Python_SITELIB

第三方平台獨立安裝目錄。

sysconfig.get_path('purelib') 傳回的資訊。

Python_SITEARCH

第三方平台相依安裝目錄。

sysconfig.get_path('platlib') 傳回的資訊。

Python_SOABI

於版本 3.17 加入。

模組的副檔名。

sysconfig.get_config_var('EXT_SUFFIX')sysconfig.get_config_var('SOABI')python3-config --extension-suffix 計算出的資訊。

Python_SOSABI

於版本 3.26 加入。

使用穩定應用程式二進位介面的模組的副檔名。

如果指定了 COMPONENT Interpreter,則從 importlib.machinery.EXTENSION_SUFFIXES 計算出的資訊。否則,副檔名為 abi3,但 WindowsMSYSCYGWIN 除外,其為空字串。

Python_Compiler_FOUND

系統具有 Python 編譯器。

Python_COMPILER

Python 編譯器的路徑。僅 IronPython 提供。

Python_COMPILER_ID
編譯器獨有的簡短字串。可能的值包括
  • IronPython

Python_DOTNET_LAUNCHER

於版本 3.18 加入。

.Net 直譯器。僅由 IronPython 實作使用。

Python_Development_FOUND

系統具有 Python 開發成品。

Python_Development.Module_FOUND

於版本 3.18 加入。

系統具有 Python 模組的 Python 開發成品。

Python_Development.SABIModule_FOUND

於版本 3.26 加入。

系統具有使用穩定應用程式二進位介面的 Python 模組的 Python 開發成品。

Python_Development.Embed_FOUND

於版本 3.18 加入。

系統具有 Python 嵌入的 Python 開發成品。

Python_INCLUDE_DIRS

Python 包含目錄。

Python_DEFINITIONS

於版本 3.30.3 加入。

Python 前置處理器定義。

Python_DEBUG_POSTFIX

除錯 Python 模組的後綴。此變數可用於定義 DEBUG_POSTFIX 目標屬性。

Python_LINK_OPTIONS

於版本 3.19 加入。

Python 連結選項。某些組態需要特定的連結選項才能正確建置和執行。

Python_LIBRARIES

Python 函式庫。

Python_LIBRARY_DIRS

Python 函式庫目錄。

Python_RUNTIME_LIBRARY_DIRS

Python 執行時期函式庫目錄。

Python_SABI_LIBRARIES

於版本 3.26 加入。

適用於穩定應用程式二進位介面的 Python 函式庫。

Python_SABI_LIBRARY_DIRS

於版本 3.26 加入。

Python SABI 函式庫目錄。

Python_RUNTIME_SABI_LIBRARY_DIRS

於版本 3.26 加入。

Python 執行時期 SABI 函式庫目錄。

Python_VERSION

Python 版本。

Python_VERSION_MAJOR

Python 主要版本。

Python_VERSION_MINOR

Python 次要版本。

Python_VERSION_PATCH

Python 修補版本。

Python_PyPy_VERSION

於版本 3.18 加入。

Python PyPy 版本。

Python_NumPy_FOUND

於版本 3.14 加入。

系統有 NumPy。

Python_NumPy_INCLUDE_DIRS

於版本 3.14 加入。

NumPy 包含目錄。

Python_NumPy_VERSION

於版本 3.14 加入。

NumPy 版本。

提示

Python_ROOT_DIR

定義 Python 安裝的根目錄。

Python_USE_STATIC_LIBS
  • 如果未定義,則依序搜尋共用函式庫和靜態函式庫。

  • 如果設定為 TRUE,則搜尋靜態函式庫。

  • 如果設定為 FALSE,則搜尋共用函式庫。

注意

此提示在 Windows 上將被忽略,因為在此平台上無法使用靜態函式庫。

Python_FIND_ABI

在版本 3.16 中新增。

此變數定義應搜尋哪個 ABI,如 PEP 3149 中所定義。

注意

僅在搜尋 Python 版本 3 時才會採用此提示。

Python_FIND_ABI 變數是一個 4 元組,依序指定 pydebug (d)、pymalloc (m)、unicode (u) 和 gil_disabled (t) 旗標。

在版本 3.30 中新增:新增了第四個元素,指定 gil_disabled 旗標 (即 free threaded python),並且為選用。如果未指定,則值為 OFF

每個元素可以設定為下列其中之一

  • ON:選取對應的旗標。

  • OFF:未選取對應的旗標。

  • ANY:將搜尋兩種可能性 (ONOFF)。

注意

如果未定義 Python3_FIND_ABI,則會搜尋任何 ABI,不包括 gil_disabled 旗標。

從這個 4 元組中,將會從最特殊到最一般搜尋各種 ABI。此外,當為 pydebuggil_disabled 指定 ANY 時,將在 non-debugnon-gil-disabled 版本之後搜尋 debugfree threaded 版本。

例如,如果我們有

set (Python_FIND_ABI "ON" "ANY" "ANY" "ON")

以下旗標組合將依序附加到成品名稱:tdmutdmtdutd

以及搜尋任何可能的 ABI

set (Python_FIND_ABI "ANY" "ANY" "ANY" "ANY")

將依序使用下列組合:mumu<empty>dmudmdudtmutmtuttdmutdmtdutd

注意

除了 gil_disabled 旗標之外,此提示僅在 POSIX 系統上才有用。因此,在 Windows 系統上,當定義 Python_FIND_ABI 時,只有當每個旗標的值為 OFFANY (第四個 (gil_disabled) 除外) 時,才會找到來自 python.orgPython 發行版。

Python_FIND_STRATEGY

於版本 3.15 加入。

此變數定義將如何執行查詢。Python_FIND_STRATEGY 變數可以設定為下列其中之一

  • VERSION:嘗試在所有指定的location中尋找最新的版本。如果策略 CMP0094 未定義或設定為 OLD,則這是預設值。

  • LOCATION:一旦找到滿足版本約束的版本,就會停止查詢。如果策略 CMP0094 設定為 NEW,則這是預設值。

另請參閱 Python_FIND_UNVERSIONED_NAMES

Python_FIND_REGISTRY

在版本 3.13 中新增。

在 Windows 上,Python_FIND_REGISTRY 變數會決定登錄和環境變數之間的偏好順序。Python_FIND_REGISTRY 變數可以設定為下列其中之一

  • FIRST:嘗試先使用登錄,然後再使用環境變數。這是預設值。

  • LAST:嘗試在使用環境變數之後使用登錄。

  • NEVER:永遠不要嘗試使用登錄。

Python_FIND_FRAMEWORK

於版本 3.15 加入。

在 macOS 上,Python_FIND_FRAMEWORK 變數會決定 Apple 樣式和 Unix 樣式封裝元件之間的偏好順序。此變數可以採用與 CMAKE_FIND_FRAMEWORK 變數相同的值。

注意

不支援值 ONLY,因此會改為使用 FIRST

如果未定義 Python_FIND_FRAMEWORK,則會使用 CMAKE_FIND_FRAMEWORK 變數 (如果有的話)。

Python_FIND_VIRTUALENV

於版本 3.15 加入。

此變數定義如何處理由 virtualenvconda 管理的虛擬環境。只有在虛擬環境處於活動狀態時 (即已評估 activate 指令碼) 才是有意義的。在這種情況下,它會優先於 Python_FIND_REGISTRYCMAKE_FIND_FRAMEWORK 變數。Python_FIND_VIRTUALENV 變數可以設定為下列其中之一

  • FIRST:在任何其他標準路徑之前使用虛擬環境來尋找直譯器。這是預設值。

  • ONLY:僅使用虛擬環境來尋找直譯器。

  • STANDARD:虛擬環境不使用來尋找直譯器,但一律會考慮環境變數 PATH。在這種情況下,可以將變數 Python_FIND_REGISTRY (Windows) 或 CMAKE_FIND_FRAMEWORK (macOS) 設定為值 LASTNEVER,以優先選取虛擬環境中的直譯器。

在版本 3.17 中新增:新增對 conda 環境的支援。

注意

如果請求元件 Development,則強烈建議也包含元件 Interpreter 以獲得預期的結果。

Python_FIND_IMPLEMENTATIONS

於版本 3.18 加入。

此變數定義將搜尋的不同實作的排序清單。Python_FIND_IMPLEMENTATIONS 變數可以保留下列值

  • CPython:這是標準實作。諸如 AnacondaActivePython 之類的各種產品都依賴此實作。

  • IronPython:此實作在 動態語言執行階段 (DLR) 之上,為 .NET Framework 使用 CSharp 語言。請參閱 IronPython

  • PyPy:此實作使用 RPython 語言和 RPython 轉譯工具鏈來產生 Python 直譯器。請參閱 PyPy

預設值為

  • Windows 平台:CPythonIronPython

  • 其他平台:CPython

注意

此提示的優先順序在所有提示中最低,因此即使您先指定 IronPython,然後再指定 CPython,也可能會選擇基於 CPython 的 Python 產品,例如使用 Python_FIND_STRATEGY=LOCATION 時,每個位置都會先搜尋 IronPython,然後再搜尋 CPython

注意

當指定 IronPython 時,在 Windows 以外的平台上,預期可以透過 PATH 變數存取 .Net 直譯器(即 mono 命令)。

Python_FIND_UNVERSIONED_NAMES

在版本 3.20 中新增。

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

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

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

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

另請參閱 Python_FIND_STRATEGY

工件規格

在版本 3.16 中新增。

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

Python_EXECUTABLE

直譯器的路徑。

Python_COMPILER

編譯器的路徑。

Python_DOTNET_LAUNCHER

於版本 3.18 加入。

.Net 直譯器。僅由 IronPython 實作使用。

Python_LIBRARY

函式庫的路徑。它將用於計算變數 Python_LIBRARIESPython_LIBRARY_DIRSPython_RUNTIME_LIBRARY_DIRS

Python_SABI_LIBRARY

於版本 3.26 加入。

用於穩定應用程式二進位介面的函式庫路徑。它將用於計算變數 Python_SABI_LIBRARIESPython_SABI_LIBRARY_DIRSPython_RUNTIME_SABI_LIBRARY_DIRS

Python_INCLUDE_DIR

Python 標頭檔案目錄的路徑。它將用於計算變數 Python_INCLUDE_DIRS

Python_NumPy_INCLUDE_DIR

NumPy 標頭檔案目錄的路徑。它將用於計算變數 Python_NumPy_INCLUDE_DIRS

注意

所有路徑都必須是絕對路徑。任何以相對路徑指定的工件都將被忽略。

注意

當指定工件時,所有 HINTS 都將被忽略,並且不會對此工件執行搜尋。

如果指定多個工件,使用者有責任確保各個工件的一致性。

預設情況下,此模組支援在專案的不同目錄中進行多次呼叫,且具有不同的版本/元件要求,同時為每次呼叫提供正確且一致的結果。為了支援此行為,CMake 快取不會以傳統方式使用,這對於互動式規格可能會產生問題。因此,為了同時啟用互動式規格,可以使用以下變數控制模組行為

Python_ARTIFACTS_INTERACTIVE

於版本 3.18 加入。

選取模組的行為。這是一個布林變數

  • 如果設定為 TRUE:為上述工件規格變數建立 CMake 快取項目,以便使用者可以互動式編輯它們。這將停用對多個版本/元件要求的支援。

  • 如果設定為 FALSE 或未定義:啟用多個版本/元件要求。

命令

此模組定義命令 Python_add_library(當 CMAKE_ROLEPROJECT 時),它具有與 add_library() 相同的語意,並新增對目標 Python::Python 的依賴,或者當函式庫類型為 MODULE 時,新增對目標 Python::ModulePython::SABIModule(當指定 USE_SABI 選項時)的依賴,並處理 Python 模組命名規則

Python_add_library (<name> [STATIC | SHARED | MODULE [USE_SABI <version>] [WITH_SOABI]]
                    <source1> [<source2> ...])

如果未指定函式庫類型,則假設為 MODULE

在版本 3.17 中新增:對於 MODULE 函式庫類型,如果指定選項 WITH_SOABI,則模組後綴將包含 Python_SOABI 值(如果有的話)。

在版本 3.26 中新增:對於 MODULE 類型,如果指定選項 USE_SABI,則預處理器定義 Py_LIMITED_API 將針對目標 <name> 指定為 PRIVATE,其值從 <version> 引數計算而來。<version> 的預期格式為 major[.minor],其中每個元件都是數值。如果指定 minor 元件,則版本至少應為 3.2,這是引入 穩定應用程式二進位介面的版本。僅指定主要版本 3 等同於 3.2

當同時指定選項 WITH_SOABI 時,模組後綴將包含 Python_SOSABI 值(如果有的話)。

在版本 3.30 中新增:對於 MODULE 類型,DEBUG_POSTFIX 目標屬性將使用 Python_DEBUG_POSTFIX 變數的值進行初始化(如果已定義)。