FindPython¶
於版本 3.12 加入。
尋找 Python 直譯器、編譯器和開發環境(包含目錄和函式庫)。
於版本 3.19 加入:當請求特定版本時,可以指定為簡單值或範圍。關於版本範圍的使用方式與功能的詳細說明,請參考 find_package()
命令。
支援以下組件
Interpreter
:搜尋 Python 直譯器。Compiler
:搜尋 Python 編譯器。僅 IronPython 提供。Development
:搜尋開發成品(包含目錄和函式庫)。於版本 3.18 加入:此組件包含兩個可獨立指定的子組件
Development.Module
:搜尋 Python 模組開發所需的成品。Development.Embed
:搜尋 Python 嵌入式開發所需的成品。
於版本 3.26 加入
Development.SABIModule
:搜尋使用穩定應用程式二進位介面的 Python 模組開發所需的成品。此組件僅適用於版本3.2
及更高版本。
NumPy
:搜尋 NumPy 包含目錄。
於版本 3.14 加入:新增 NumPy
組件。
如果未指定 COMPONENTS
,則會假設為 Interpreter
。
如果指定了 Development
組件,則表示子組件 Development.Module
和 Development.Embed
。
為了確保 Interpreter
、 Compiler
、Development
(或其子組件之一)和 NumPy
組件之間的版本一致,請同時指定所有組件。
find_package (Python COMPONENTS Interpreter Development)
此模組優先尋找 Python 3 版本。如果找不到,則會搜尋版本 2。為了管理 Python 3 和 2 的並行版本,請使用 FindPython3
和 FindPython2
模組,而不是此模組。
注意
如果同時指定了 Interpreter
和 Development
(或其子組件之一)組件,此模組僅會搜尋與 CMake 組態定義的平台架構相同的直譯器。如果僅指定 Interpreter
組件,則此限制不適用。
匯入目標¶
此模組定義了以下匯入目標
於版本 3.14 變更:只有當 CMAKE_ROLE
為 PROJECT
時,才會建立 匯入目標。
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_EXECUTABLE
或Python_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
,但Windows
、MSYS
和CYGWIN
除外,其為空字串。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
:將搜尋兩種可能性 (ON
和OFF
)。
注意
如果未定義
Python3_FIND_ABI
,則會搜尋任何 ABI,不包括gil_disabled
旗標。從這個 4 元組中,將會從最特殊到最一般搜尋各種 ABI。此外,當為
pydebug
和gil_disabled
指定ANY
時,將在non-debug
和non-gil-disabled
版本之後搜尋debug
和free threaded
版本。例如,如果我們有
set (Python_FIND_ABI "ON" "ANY" "ANY" "ON")
以下旗標組合將依序附加到成品名稱:
tdmu
、tdm
、tdu
和td
。以及搜尋任何可能的 ABI
set (Python_FIND_ABI "ANY" "ANY" "ANY" "ANY")
將依序使用下列組合:
mu
、m
、u
、<empty>
、dmu
、dm
、du
、d
、tmu
、tm
、tu
、t
、tdmu
、tdm
、tdu
和td
。注意
除了
gil_disabled
旗標之外,此提示僅在POSIX
系統上才有用。因此,在Windows
系統上,當定義Python_FIND_ABI
時,只有當每個旗標的值為OFF
或ANY
(第四個 (gil_disabled
) 除外) 時,才會找到來自 python.org 的Python
發行版。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 加入。
此變數定義如何處理由
virtualenv
或conda
管理的虛擬環境。只有在虛擬環境處於活動狀態時 (即已評估activate
指令碼) 才是有意義的。在這種情況下,它會優先於Python_FIND_REGISTRY
和CMAKE_FIND_FRAMEWORK
變數。Python_FIND_VIRTUALENV
變數可以設定為下列其中之一FIRST
:在任何其他標準路徑之前使用虛擬環境來尋找直譯器。這是預設值。ONLY
:僅使用虛擬環境來尋找直譯器。STANDARD
:虛擬環境不使用來尋找直譯器,但一律會考慮環境變數PATH
。在這種情況下,可以將變數Python_FIND_REGISTRY
(Windows) 或CMAKE_FIND_FRAMEWORK
(macOS) 設定為值LAST
或NEVER
,以優先選取虛擬環境中的直譯器。
在版本 3.17 中新增:新增對
conda
環境的支援。注意
如果請求元件
Development
,則強烈建議也包含元件Interpreter
以獲得預期的結果。Python_FIND_IMPLEMENTATIONS
於版本 3.18 加入。
此變數定義將搜尋的不同實作的排序清單。
Python_FIND_IMPLEMENTATIONS
變數可以保留下列值CPython
:這是標準實作。諸如Anaconda
或ActivePython
之類的各種產品都依賴此實作。IronPython
:此實作在 動態語言執行階段 (DLR
) 之上,為.NET Framework
使用CSharp
語言。請參閱 IronPython。PyPy
:此實作使用RPython
語言和RPython
轉譯工具鏈來產生 Python 直譯器。請參閱 PyPy。
預設值為
Windows 平台:
CPython
、IronPython
其他平台:
CPython
注意
此提示的優先順序在所有提示中最低,因此即使您先指定
IronPython
,然後再指定CPython
,也可能會選擇基於CPython
的 Python 產品,例如使用Python_FIND_STRATEGY=LOCATION
時,每個位置都會先搜尋IronPython
,然後再搜尋CPython
。注意
當指定
IronPython
時,在Windows
以外的平台上,預期可以透過PATH
變數存取.Net
直譯器(即mono
命令)。Python_FIND_UNVERSIONED_NAMES
在版本 3.20 中新增。
此變數定義如何搜尋通用名稱。目前,它僅適用於直譯器的通用名稱,即
python3
或python2
以及python
。Python_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_LIBRARIES
、Python_LIBRARY_DIRS
和Python_RUNTIME_LIBRARY_DIRS
。Python_SABI_LIBRARY
於版本 3.26 加入。
用於穩定應用程式二進位介面的函式庫路徑。它將用於計算變數
Python_SABI_LIBRARIES
、Python_SABI_LIBRARY_DIRS
和Python_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_ROLE
為 PROJECT
時),它具有與 add_library()
相同的語意,並新增對目標 Python::Python
的依賴,或者當函式庫類型為 MODULE
時,新增對目標 Python::Module
或 Python::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
變數的值進行初始化(如果已定義)。