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
-
python2
或python3
之一:在这两种情况下,模块都将尝试一些替代名称:Windows 上的py -2
或py -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_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 版本(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.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()
获取 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
模块获得的信息。
它公开与其父类相同的方法。
搜索结果是