FindPython3

版本 3.12 新增。

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

版本 3.19 新增:當請求版本時,可以指定為簡單值或範圍。 有關版本範圍用法和功能的詳細描述,請參閱 find_package() 命令。

支援以下組件

  • Interpreter:搜尋 Python 3 直譯器

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

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

    版本 3.18 新增:此組件包含兩個可以獨立指定的子組件

    • Development.Module:搜尋 Python 3 模組開發的工件。

    • Development.Embed:搜尋 Python 3 嵌入式開發的工件。

    版本 3.26 新增

  • NumPy:搜尋 NumPy 包含目錄。

版本 3.14 新增:新增 NumPy 組件。

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

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

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

find_package (Python3 COMPONENTS Interpreter Development)

此模組僅尋找 Python 3 版本。 此模組可以與 FindPython2 模組同時使用,以使用兩個 Python 版本。

如果您不介意 Python 版本,可以使用 FindPython 模組。

注意

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

匯入目標

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

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

Python3::Interpreter

Python 3 直譯器。 僅當找到 Interpreter 組件時,才會定義此目標。

Python3::InterpreterDebug

版本 3.30 新增。

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

Python3::InterpreterMultiConfig

版本 3.30 新增。

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

Python3::Compiler

Python 3 編譯器。 僅當找到 Compiler 組件時,才會定義此目標。

Python3::Module

版本 3.15 新增。

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

Python3::SABIModule

版本 3.26 新增。

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

Python3::Python

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

Python3::NumPy

版本 3.14 新增。

用於 Python 3 的 NumPy 函式庫。 如果找到組件 NumPy,則定義目標。

結果變數

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

Python3_FOUND

系統具有請求的 Python 3 組件。

Python3_Interpreter_FOUND

系統具有 Python 3 直譯器。

Python3_EXECUTABLE

Python 3 直譯器的路徑。

Python3_EXECUTABLE_DEBUG

版本 3.30 新增。

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

Python3_INTERPRETER

版本 3.30 新增。

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

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

  • ActivePython

  • Anaconda

  • Canopy

  • IronPython

  • PyPy

Python3_STDLIB

標準平台獨立安裝目錄。

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

Python3_STDARCH

標準平台相關安裝目錄。

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

Python3_SITELIB

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

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

Python3_SITEARCH

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

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

Python3_SOABI

版本 3.17 新增。

模組的副檔名。

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

Python3_SOSABI

版本 3.26 新增。

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

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

Python3_Compiler_FOUND

系統具有 Python 3 編譯器。

Python3_COMPILER

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

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

Python3_DOTNET_LAUNCHER

版本 3.18 新增。

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

Python3_Development_FOUND

系統具有 Python 3 開發工件。

Python3_Development.Module_FOUND

版本 3.18 新增。

系統具有 Python 模組的 Python 3 開發工件。

Python3_Development.SABIModule_FOUND

版本 3.26 新增。

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

Python3_Development.Embed_FOUND

版本 3.18 新增。

系統具有 Python 嵌入的 Python 3 開發工件。

Python3_INCLUDE_DIRS

Python 3 包含目錄。

Python3_DEFINITIONS

版本 3.30.3 新增。

Python 3 前處理器定義。

Python3_DEBUG_POSTFIX

版本 3.30 新增。

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

Python3_LINK_OPTIONS

版本 3.19 新增。

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

Python3_LIBRARIES

Python 3 函式庫。

Python3_LIBRARY_DIRS

Python 3 函式庫目錄。

Python3_RUNTIME_LIBRARY_DIRS

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

Python3_SABI_LIBRARIES

版本 3.26 新增。

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

Python3_SABI_LIBRARY_DIRS

版本 3.26 新增。

Python 3 SABI 函式庫目錄。

Python3_RUNTIME_SABI_LIBRARY_DIRS

版本 3.26 新增。

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

Python3_VERSION

Python 3 版本。

Python3_VERSION_MAJOR

Python 3 主要版本。

Python3_VERSION_MINOR

Python 3 次要版本。

Python3_VERSION_PATCH

Python 3 修補版本。

Python3_PyPy_VERSION

版本 3.18 新增。

Python 3 PyPy 版本。

Python3_NumPy_FOUND

版本 3.14 新增。

系統具有 NumPy。

Python3_NumPy_INCLUDE_DIRS

版本 3.14 新增。

NumPy 包含目錄。

Python3_NumPy_VERSION

版本 3.14 新增。

NumPy 版本。

提示

Python3_ROOT_DIR

定義 Python 3 安裝的根目錄。

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

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

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

注意

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

Python3_FIND_ABI

版本 3.16 新增。

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

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

版本 3.30 新增:新增了第四個元素,指定 gil_disabled 旗標(即自由執行緒 python),並且是可選的。 如果未指定,則值為 OFF

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

  • ON:選取對應的旗標。

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

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

注意

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

從這個 4 元組中,將搜尋各種 ABI,從最專門的到最通用的開始。 此外,當為 pydebuggil_disabled 指定 ANY 時,將在 non-debugnon-gil-disabled 版本**之後**搜尋 debugfree threaded 版本。

例如,如果我們有

set (Python3_FIND_ABI "ON" "ANY" "ANY" "ON")

以下旗標組合將按順序附加到工件名稱:tdmutdmtdutd

為了搜尋任何可能的 ABI

set (Python3_FIND_ABI "ANY" "ANY" "ANY" "ANY")

將按順序使用以下組合:mumu<empty>dmudmdudtmutmtuttdmutdmtdutd

注意

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

Python3_FIND_STRATEGY

版本 3.15 新增。

此變數定義將如何執行查找。 Python3_FIND_STRATEGY 變數可以設定為以下之一

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

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

另請參閱 Python3_FIND_UNVERSIONED_NAMES

Python3_FIND_REGISTRY

版本 3.13 新增。

在 Windows 上,Python3_FIND_REGISTRY 變數決定了登錄檔和環境變數之間的偏好順序。 Python3_FIND_REGISTRY 變數可以設定為以下之一

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

  • LAST:嘗試先使用環境變數,再使用登錄檔。

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

Python3_FIND_FRAMEWORK

版本 3.15 新增。

在 macOS 上,Python3_FIND_FRAMEWORK 變數決定了 Apple 風格和 Unix 風格套件組件之間的偏好順序。 此變數可以採用與 CMAKE_FIND_FRAMEWORK 變數相同的值。

注意

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

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

Python3_FIND_VIRTUALENV

版本 3.15 新增。

此變數定義了虛擬環境(由 virtualenvconda 管理)的處理方式。 僅當虛擬環境處於活動狀態時(即已評估 activate 腳本),此變數才有意義。 在這種情況下,它優先於 Python3_FIND_REGISTRYCMAKE_FIND_FRAMEWORK 變數。 Python3_FIND_VIRTUALENV 變數可以設定為以下之一

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

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

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

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

注意

如果請求了組件 Development(或其子組件之一)但未找到或傳回了錯誤的工件,則包含組件 Interpreter 可能會有所幫助。

Python3_FIND_IMPLEMENTATIONS

版本 3.18 新增。

此變數在有序列表中定義了將要搜尋的不同實作。 Python3_FIND_IMPLEMENTATIONS 變數可以包含以下值

  • CPython:這是標準實作。 各種產品,例如 AnacondaActivePython,都依賴於此實作。

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

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

預設值為

  • Windows 平台:CPythonIronPython

  • 其他平台:CPython

注意

此提示具有所有提示中的最低優先順序,因此即使例如您先指定 IronPython,然後指定 CPython,也可能選取基於 CPython 的 python 產品,因為例如使用 Python3_FIND_STRATEGY=LOCATION,每個位置將首先搜尋 IronPython,然後搜尋 CPython

注意

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

Python3_FIND_UNVERSIONED_NAMES

版本 3.20 新增。

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

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

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

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

另請參閱 Python3_FIND_STRATEGY

工件規格

版本 3.16 新增。

為了解決特殊情況,可以直接設定以下變數來指定工件

Python3_EXECUTABLE

直譯器的路徑。

Python3_COMPILER

編譯器的路徑。

Python3_DOTNET_LAUNCHER

版本 3.18 新增。

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

Python3_LIBRARY

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

Python3_SABI_LIBRARY

版本 3.26 新增。

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

Python3_INCLUDE_DIR

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

Python3_NumPy_INCLUDE_DIR

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

注意

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

注意

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

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

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

Python3_ARTIFACTS_INTERACTIVE

版本 3.18 新增。

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

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

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

Python3_ARTIFACTS_PREFIX

版本 4.0 新增。

定義一個自訂前綴,該前綴將用於定義所有結果變數、目標和命令。 透過使用此變數,此模組支援在同一目錄中進行多次呼叫,並具有不同的版本/組件要求。 例如,在交叉編譯的情況下,需要開發組件,但也可能需要原生 python 直譯器

find_package(Python3 COMPONENTS Development)

set(Python3_ARTIFACTS_PREFIX "_HOST")
find_package(Python3 COMPONENTS Interpreter)

# Here Python3_HOST_EXECUTABLE and Python3_HOST::Interpreter artifacts are defined

注意

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

命令

此模組定義了 Python3_add_library 命令(當 CMAKE_ROLEPROJECT 時),該命令具有與 add_library() 相同的語義,並添加對目標 Python3::Python 的依賴;或者,當庫類型為 MODULE 時,添加對目標 Python3::ModulePython3::SABIModule(當指定 USE_SABI 選項時)的依賴,並處理 Python 模組命名規則。

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

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

Added in version 3.17: 對於 MODULE 庫類型,如果指定了 WITH_SOABI 選項,則模組後綴將包含 Python3_SOABI 值(如果有的話)。

Added in version 3.26: 對於 MODULE 類型,如果指定了選項 USE_SABI,則預處理器定義 Py_LIMITED_API 將被指定為 PRIVATE,用於目標 <name>,其值從 <version> 參數計算而來。 <version> 的預期格式為 major[.minor],其中每個組件都是數值。 如果指定了 minor 組件,則版本應至少為 3.2,這是引入 Stable Application Binary Interface 的版本。 僅指定主版本 3 等同於 3.2

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

Added in version 3.30: 對於 MODULE 類型,如果定義了 Python3_DEBUG_POSTFIX 變數,則 DEBUG_POSTFIX 目標屬性將使用該變數的值初始化。