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

  • python2python3 其中之一:在任一情況下,模組都會嘗試一些替代名稱:在 Windows 上是 py -2py -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_suffixname_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.platlibdirpython.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.platlibdirpython.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 模組取得的資訊。

它公開與其父類別相同的方法。

搜尋結果為