Python 模組
此模組提供尋找和建構針對 Python 安裝的擴充功能的支援,無論是 Python 2 還是 3。
如果您想使用與 PEP-517 相容的工具來建構和封裝 Python 擴充模組,請查看 meson-python。
如果您要針對位於 venv 或 Conda 環境中的 Python 直譯器建構 Python 擴充模組,您可能需要設定 python.install_venv=auto
;詳情請參閱 Python 模組選項。
新增於 0.46.0
函式
find_installation()
pymod.find_installation(name_or_path, ...)
尋找符合 name_or_path
的 Python 安裝。
該參數是可選的,如果未提供,則返回的 Python 安裝將是用於執行 Meson 的 Python 安裝。
如果提供,它可以是
-
一個簡單的名稱,例如
python-2.7
,Meson 將使用find_program()
尋找以此方式命名的外部程式。 -
一個路徑,例如
/usr/local/bin/python3.4m
-
python2
或python3
其中之一:在任一情況下,模組都會嘗試一些替代名稱:在 Windows 上是py -2
或py -3
,在所有其他地方則是python
。在後一種情況下,它會檢查 sysconfig 模組提供的版本是否與所需的主版本相符。自 1.2.0 起,在 Windows 上搜尋次要版本 (例如
python3.11
) 也有效。
關鍵字參數如下
-
required
:預設情況下,required
設定為true
,如果找不到 Python 安裝,Meson 將中止。如果required
設定為false
,即使找不到 Python 安裝,Meson 也會繼續。然後您可以使用返回物件上的.found()
方法來檢查是否已找到。自 0.48.0 起,feature
選項的值也可以傳遞給required
關鍵字參數。 -
disabler
:如果true
且找不到 Python 安裝,則返回disabler
物件,而不是未找到的物件。自 0.49.0 起 -
modules
:此 Python 安裝必須具有的模組名稱清單。自 0.51.0 起 -
pure
:在某些平台上,獨立於架構的檔案預期放置在單獨的目錄中。但是,如果 Python 來源應該與使用此模組建構的擴充模組一起安裝,則可以使用此關鍵字參數來覆寫.install_sources()
的預設行為。自 0.64.0 起
返回:一個 Python 安裝
python_installation
物件
python_installation
物件是一個 external_program
,帶有幾個額外的方法。
方法
path()
str py_installation.path()
新增於 0.50.0
運作方式與其他 ExternalProgram
物件的 path 方法相同。由於錯誤,在 0.50.0 之前未提供。
extension_module()
shared_module py_installation.extension_module(module_name, list_of_sources, ...)
建立一個 shared_module()
目標,該目標根據目標平台的命名慣例命名。
所有位置和關鍵字參數與 shared_module()
的相同,不包括 name_suffix
和 name_prefix
,並新增以下內容
-
subdir
:預設情況下,Meson 會將擴充模組安裝在 Python 安裝的相關頂層位置,例如/usr/lib/site-packages
。當將 subdir 傳遞給此方法時,它將附加到該位置。此關鍵字參數與install_dir
互斥 -
limited_api
:自 1.3.0 起 包含擴充目標的 Py_LIMITED_API 的 Python 版本的字串。例如,'3.7' 以針對 Python 3.7 版本的有限 API。可以透過設定python.allow_limited_api
的值來停用此行為。請參閱 Python 模組選項。
此外,以下內容與 shared_module()
的預設行為不同
-
gnu_symbol_visibility
:如果未設定,在支援此功能的 Python 版本上,它將預設為'hidden'
(Python 標頭定義PyMODINIT_FUNC
具有預設的可見性)。
請注意,Cython 支援使用 extension_module
,請參閱 Cython 的參考。
自 0.63.0 起 如果未明確提供,extension_module
會自動新增對程式庫的相依性。為了支援舊版本,使用者可能需要新增 dependencies : py_installation.dependency()
,請參閱 dependency()
。
返回:一個 build_tgt
物件
dependency()
python_dependency py_installation.dependency(...)
自 0.53.0 起
此方法不接受位置參數,並且與標準的 dependency()
函式具有相同的關鍵字參數。它也支援以下關鍵字參數
-
embed
:(自 0.53.0 起) 如果為 true,Meson 將嘗試尋找可用於將 Python 嵌入應用程式的 Python 相依性。 -
disabler
(自 0.60.0 起):如果true
且找不到相依性,則返回 disabler 物件,而不是未找到的相依性。
返回:一個 Python 相依性
install_sources()
void py_installation.install_sources(list_of_files, ...)
安裝實際的 Python 來源 (.py
)。
所有位置和關鍵字參數與 install_data()
的相同,並新增以下內容
自 0.60.0 起,可以使用 python.platlibdir
和 python.purelibdir
選項來控制預設的安裝路徑。請參閱 Python 模組選項。
-
pure
:在某些平台上,獨立於架構的檔案預期放置在單獨的目錄中。但是,如果 Python 來源應該與使用此模組建構的擴充模組一起安裝,則可以使用此關鍵字參數來覆寫該行為。預設為在find_installation()
中指定的值,否則為true
-
subdir
:請參閱 extension_module() 的同名參數的文件 -
install_tag
(自 0.60.0 起):meson install --tags
命令用來僅安裝檔案子集的字串。預設情況下,它具有標籤python-runtime
。
get_install_dir()
string py_installation.get_install_dir(...)
檢索 install_sources() 將要安裝到的目錄。
在無法直接使用 install_sources
的情況下,例如在使用 configure_file()
時,它可能很有用。
此函式不接受任何引數,其關鍵字引數與 install_sources() 相同。
自 0.60.0 起,可以使用 python.platlibdir
和 python.purelibdir
選項來控制預設的安裝路徑。請參閱 Python 模組選項。
返回:一個字串
language_version()
string py_installation.language_version()
取得主版本.次要 Python 版本,例如 2.7
。
該版本是透過 sysconfig
模組取得。
此函式不預期有任何引數或關鍵字引數。
返回:一個字串
get_path()
string py_installation.get_path(path_name, fallback)
取得 sysconfig
模組定義的路徑。
例如
purelib = py_installation.get_path('purelib')
此函式至少需要一個引數 path_name
,預期它是一個非空字串。
如果指定了 fallback
,如果不存在具有給定名稱的路徑,它將被返回。否則,嘗試讀取不存在的路徑將導致嚴重錯誤。
返回:一個字串
has_path()
bool py_installation.has_path(path_name)
返回:如果可以使用 get_path() 檢索名為 path_name
的路徑,則為 true,否則為 false。
get_variable()
string py_installation.get_variable(variable_name, fallback)
取得 sysconfig
模組定義的變數。
例如
py_bindir = py_installation.get_variable('BINDIR', '')
此函式至少需要一個引數 variable_name
,預期它是一個非空字串。
如果指定了 fallback
,如果不存在具有給定名稱的變數,它將被返回。否則,嘗試讀取不存在的變數將導致嚴重錯誤。
返回:一個字串
has_variable()
bool py_installation.has_variable(variable_name)
返回:如果可以使用 get_variable() 檢索名為 variable_name
的變數,則為 true,否則為 false。
python_dependency
物件
此 dep
物件子類別將嘗試各種方法來取得編譯器和鏈接器引數,從 pkg-config 開始,然後可能會使用從 Python 的 sysconfig
模組取得的資訊。
它公開與其父類別相同的方法。
搜尋結果為