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 新增
Development.SABIModule
:搜尋使用 穩定應用程式二進位介面 的 Python 3 模組開發工件。 此組件僅適用於版本3.2
及更高版本。
NumPy
:搜尋 NumPy 包含目錄。
版本 3.14 新增:新增 NumPy
組件。
如果未指定 COMPONENTS
,則假定為 Interpreter
。
如果指定了組件 Development
,則表示子組件 Development.Module
和 Development.Embed
。
為了確保組件 Interpreter
、Compiler
、Development
(或其子組件之一)和 NumPy
之間的版本一致,請同時指定所有組件
find_package (Python3 COMPONENTS Interpreter Development)
此模組僅尋找 Python 3 版本。 此模組可以與 FindPython2
模組同時使用,以使用兩個 Python 版本。
如果您不介意 Python 版本,可以使用 FindPython
模組。
注意
如果同時指定了組件 Interpreter
和 Development
(或其子組件之一),則此模組僅搜尋與 CMake 組態定義的平台架構相同的直譯器。 如果僅指定 Interpreter
組件,則此限制不適用。
匯入目標¶
此模組定義了以下 匯入目標
版本 3.14 變更:僅當 CMAKE_ROLE
為 PROJECT
時,才會建立 匯入目標。
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_EXECUTABLE
或Python3_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
,但Windows
、MSYS
和CYGWIN
除外,它們為空字串。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
:將搜尋兩種可能性(ON
和OFF
)。
注意
如果未定義
Python3_FIND_ABI
,則將搜尋任何 ABI,但不包括gil_disabled
旗標。從這個 4 元組中,將搜尋各種 ABI,從最專門的到最通用的開始。 此外,當為
pydebug
和gil_disabled
指定ANY
時,將在non-debug
和non-gil-disabled
版本**之後**搜尋debug
和free threaded
版本。例如,如果我們有
set (Python3_FIND_ABI "ON" "ANY" "ANY" "ON")
以下旗標組合將按順序附加到工件名稱:
tdmu
、tdm
、tdu
和td
。為了搜尋任何可能的 ABI
set (Python3_FIND_ABI "ANY" "ANY" "ANY" "ANY")
將按順序使用以下組合:
mu
、m
、u
、<empty>
、dmu
、dm
、du
、d
、tmu
、tm
、tu
、t
、tdmu
、tdm
、tdu
和td
。注意
此提示僅在
POSIX
系統上有效,但gil_disabled
旗標除外。 因此,在Windows
系統上,當定義Python_FIND_ABI
時,僅當每個旗標的值為OFF
或ANY
時,才能找到來自 python.org 的Python
發行版,但第四個旗標(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 新增。
此變數定義了虛擬環境(由
virtualenv
或conda
管理)的處理方式。 僅當虛擬環境處於活動狀態時(即已評估activate
腳本),此變數才有意義。 在這種情況下,它優先於Python3_FIND_REGISTRY
和CMAKE_FIND_FRAMEWORK
變數。Python3_FIND_VIRTUALENV
變數可以設定為以下之一FIRST
:虛擬環境在任何其他標準路徑之前使用,以查找直譯器。 這是預設值。ONLY
:僅使用虛擬環境來查找直譯器。STANDARD
:不使用虛擬環境來查找直譯器,但始終會考慮環境變數PATH
。 在這種情況下,可以將變數Python3_FIND_REGISTRY
(Windows) 或CMAKE_FIND_FRAMEWORK
(macOS) 設定為值LAST
或NEVER
,以優先從虛擬環境中選取直譯器。
版本 3.17 新增:新增了對
conda
環境的支援。注意
如果請求了組件
Development
(或其子組件之一)但未找到或傳回了錯誤的工件,則包含組件Interpreter
可能會有所幫助。Python3_FIND_IMPLEMENTATIONS
版本 3.18 新增。
此變數在有序列表中定義了將要搜尋的不同實作。
Python3_FIND_IMPLEMENTATIONS
變數可以包含以下值CPython
:這是標準實作。 各種產品,例如Anaconda
或ActivePython
,都依賴於此實作。IronPython
:此實作使用CSharp
語言,用於 動態語言執行階段 (DLR
) 之上的.NET Framework
。 請參閱 IronPython。PyPy
:此實作使用RPython
語言和RPython 轉換工具鏈
來產生 python 直譯器。 請參閱 PyPy。
預設值為
Windows 平台:
CPython
、IronPython
其他平台:
CPython
注意
此提示具有所有提示中的最低優先順序,因此即使例如您先指定
IronPython
,然後指定CPython
,也可能選取基於CPython
的 python 產品,因為例如使用Python3_FIND_STRATEGY=LOCATION
,每個位置將首先搜尋IronPython
,然後搜尋CPython
。注意
當指定
IronPython
時,在Windows
以外的平台上,預期.Net
直譯器(即mono
命令)可透過PATH
變數取得。Python3_FIND_UNVERSIONED_NAMES
版本 3.20 新增。
此變數定義將如何搜尋通用名稱。 目前,它僅適用於直譯器的通用名稱,即
python3
和python
。Python3_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_LIBRARIES
、Python3_LIBRARY_DIRS
和Python3_RUNTIME_LIBRARY_DIRS
。Python3_SABI_LIBRARY
版本 3.26 新增。
用於穩定應用程式二進位介面的函式庫的路徑。 它將用於計算變數
Python3_SABI_LIBRARIES
、Python3_SABI_LIBRARY_DIRS
和Python3_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_ROLE
為 PROJECT
時),該命令具有與 add_library()
相同的語義,並添加對目標 Python3::Python
的依賴;或者,當庫類型為 MODULE
時,添加對目標 Python3::Module
或 Python3::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
目標屬性將使用該變數的值初始化。