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-2.7,Meson 将使用 find_program() 查找以该名称命名的外部程序

  • 一个路径,例如 /usr/local/bin/python3.4m

  • python2python3 之一:在这两种情况下,模块都将尝试一些替代名称:Windows 上的 py -2py -3,以及所有地方的 python。在后一种情况下,它将检查 sysconfig 模块提供的版本是否与所需的 major 版本匹配。

    从 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 版本(python 头文件定义 PyMODINIT_FUNC 具有默认可见性)上默认为 'hidden'

请注意,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()

获取 major.minor 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 模块获得的信息。

它公开与其父类相同的方法。

搜索结果是