PYTHON-R1.ECLASS
章节: eclass-manpages (5)更新: 2024年11月
索引 返回主目录
名称
python-r1.eclass - Python 软件包的通用简单 eclass。描述
一个通用的 eclass,提供辅助函数来构建和安装支持为多个 Python 实现安装的软件包。此 eclass 设置正确的 IUSE。REQUIRED_USE 的修改必须由 ebuild 的作者完成(但为了方便起见提供了 PYTHON_REQUIRED_USE,见下文)。python-r1 导出 PYTHON_DEPS 和 PYTHON_USEDEP,以便您可以轻松地为您的软件包创建正确的依赖关系。它还提供方法来轻松地为每个启用的 Python 实现运行命令并复制其源代码。
请注意,python-r1 将始终继承 python-utils-r1。因此,在那里定义的所有函数都可以在使用 python-r1 的软件包中使用,并且永远不需要同时继承两者。
有关更多信息,请参阅 Python 指南:https://projects.gentoo.org/python/guide/
支持的 EAPIS
7 8传递提供的 ECLASES
python-utils-r1函数
- python_gen_useflags [<模式>...]
- 输出 Python 实现的 USE 标志列表,这些实现同时在 PYTHON_COMPAT 中并且与作为参数传递给函数的任何模式匹配。
有关模式语法的详细信息,请参阅 python-utils-r1.eclass 中的 _python_impl_matches。
示例
PYTHON_COMPAT=( python{2_7,3_4} ) REQUIRED_USE="doc? ( || ( $(python_gen_useflags python2*) ) )"
它将导致变量看起来像
REQUIRED_USE="doc? ( || ( python_targets_python2_7 ) )"
- python_gen_cond_dep <依赖项> [<模式>...]
- 输出 <依赖项> 列表,这些依赖项有条件地取决于 Python 实现的 USE 标志,这些实现同时在 PYTHON_COMPAT 中并且与作为其余参数传递的任何模式匹配。
有关模式语法的详细信息,请参阅 python-utils-r1.eclass 中的 _python_impl_matches。
为了在软件包上强制执行 USE 约束,可以在依赖项规范中放置逐字的 '${PYTHON_USEDEP}'(带引号!)。它将在函数内扩展为正确的 USE 依赖项字符串。
示例
PYTHON_COMPAT=( python{2_7,3_{3,4}} pypy ) RDEPEND="$(python_gen_cond_dep \ 'dev-python/unittest2[${PYTHON_USEDEP}]' python2_7 pypy )"
它将导致变量看起来像
RDEPEND="python_targets_python2_7? ( dev-python/unittest2[python_targets_python2_7?] ) python_targets_pypy? ( dev-python/unittest2[python_targets_pypy?] )"
- python_gen_impl_dep [<请求的 use 标志> [<实现模式>...]]
- 输出对 Python 实现的依赖项,并附加指定的 USE 依赖项字符串,或者如果没有参数(或参数为空)则不输出 USE 依赖项字符串。如果传递了任何实现模式,则只会为与这些模式匹配的实现生成输出依赖项。
有关模式语法的详细信息,请参阅 python-utils-r1.eclass 中的 _python_impl_matches。
当您需要根据软件包的 USE 标志请求 Python 解释器的不同 USE 标志时,请使用此函数。如果您只需要一组解释器 USE 标志,只需设置 PYTHON_REQ_USE 并全局使用 ${PYTHON_DEPS}。
示例
PYTHON_COMPAT=( python{2_7,3_{3,4}} pypy ) RDEPEND="foo? ( $(python_gen_impl_dep 'xml(+)') )"
它将导致变量看起来像
RDEPEND="foo? ( python_targets_python2_7? ( dev-lang/python:2.7[xml(+)] ) python_targets_pypy? ( dev-python/pypy[xml(+)] ) )"
- python_gen_any_dep [<依赖项块> [<实现模式>...]]
- 生成一个 any-of 依赖项,该依赖项强制 Python 解释器和 Python 软件包之间进行版本匹配。<依赖项块> 可以列出多个依赖项,并使用逐字的 '${PYTHON_USEDEP}' 或 '${PYTHON_SINGLE_USEDEP}' 引用(带引号!),这些引用将在函数内部扩展。如果 <依赖项块> 是一个空字符串(或没有传递参数),则将生成对任何 Python 解释器的纯依赖项。
可以选择指定模式以将依赖项限制在 ebuild 支持的 Python 实现子集中。有关模式语法的详细信息,请参阅 python-utils-r1.eclass 中的 _python_impl_matches。
这应与相应的 python_check_deps() 一起使用,该函数检查匹配了哪些 any-of 块,以及启用匹配实现使用的 python_setup 调用。
使用示例
BDEPEND="$(python_gen_any_dep ' dev-python/foo[${PYTHON_SINGLE_USEDEP}] || ( dev-python/bar[${PYTHON_USEDEP}] dev-python/baz[${PYTHON_USEDEP}] )' -2)" python_check_deps() { python_has_version "dev-python/foo[${PYTHON_SINGLE_USEDEP}]" && { python_has_version "dev-python/bar[${PYTHON_USEDEP}]" || python_has_version "dev-python/baz[${PYTHON_USEDEP}]"; } } src_compile() { python_foreach_impl usual_code # some common post-build task that requires Python 2 python_setup -2 emake frobnicate }
示例值
|| ( ( dev-lang/python:3.7 dev-python/foo[python_single_target_python3_7(-)] || ( dev-python/bar[python_targets_python3_7(-),-python_single_target_python3_7(-)] dev-python/baz[python_targets_python3_7(-),-python_single_target_python3_7(-)] ) ) ( dev-lang/python:3.8 dev-python/foo[python_single_target_python3_8(-)] || ( dev-python/bar[python_targets_python3_8(-)] dev-python/baz[python_targets_python3_8(-)] ) ) )
- python_copy_sources
- 为每个启用的 Python 实现创建软件包源代码的单个副本。
源代码始终从初始 BUILD_DIR(如果未设置则为 S)复制到与 python_foreach_abi() 使用的 BUILD_DIR 匹配的特定于实现的构建目录。
- python_foreach_impl <命令> [<参数>...]
- 为每个启用的 Python 实现运行给定的命令。如果传递了其他参数,它们将传递给命令。
如果所有调用都成功,则该函数将返回 0 状态。否则,将返回第一个失败调用的返回代码。
对于正在运行的每个命令,EPYTHON、PYTHON 和 BUILD_DIR 在本地设置,前两个导出到命令环境。
- python_setup [<实现模式>...]
- 查找最适合运行通用 Python 代码的最佳(最优选)Python 实现。为该实现设置 Python 构建环境。此函数有两种操作模式:纯模式和 any-of 依赖模式。
如果未声明 python_check_deps() 函数,则使用纯模式。在这种情况下,如果实现受支持(在 PYTHON_COMPAT 中)、已启用(通过 USE 标志)并且至少与传递的一个模式匹配(如果未传递任何模式则为 '*'),则该实现被认为是合适的。
纯模式中的实现限制需要伴随着适当的 REQUIRED_USE 约束。否则,eclass 可能会因未满足的依赖项而在构建时失败。
如果声明了 python_check_deps(),则使用 any-of 依赖模式。在此模式下,如果实现受支持、至少与一个模式匹配并且 python_check_deps() 返回代码成功,则该实现被认为是合适的。不考虑 USE 标志。
any-of 模式中的 python_check_deps() 函数需要伴随着适当的 any-of 依赖项。
有关模式语法的详细信息,请参阅 python-utils-r1.eclass 中的 _python_impl_matches。
当 Python 在 python_foreach_impl 调用之外被调用时(例如,对于共享进程,如文档构建),需要使用此函数。python_foreach_impl 本身设置构建环境。
纯模式示例
BDEPEND="doc? ( dev-python/epydoc[$(python_gen_usedep 'python2*')] )" REQUIRED_USE="doc? ( $(python_gen_useflags 'python2*') )" src_compile() { #... if use doc; then python_setup 'python2*' make doc fi }
Any-of 模式示例
BDEPEND="doc? ( $(python_gen_any_dep 'dev-python/epydoc[${PYTHON_USEDEP}]' 'python2*') )" python_check_deps() { ! use doc && return 0 python_has_version "dev-python/epydoc[${PYTHON_USEDEP}]" } src_compile() { #... if use doc; then python_setup 'python2*' make doc fi }
- python_replicate_script <路径>...
- 将给定的脚本复制到所有启用的 Python 实现的变体中,然后将其替换为指向包装器的符号链接。
所有指定的文件必须以 'python' shebang 开头。没有匹配 shebang 的文件将被拒绝。
ECLASS 变量
- PYTHON_COMPAT (必填)
- 此变量包含软件包支持的 Python 实现列表。它必须在 `inherit` 调用之前设置。它必须是一个数组。
示例
PYTHON_COMPAT=( python2_7 python3_3 python3_4 )
请注意,如果您愿意,也可以使用 bash 花括号扩展。
PYTHON_COMPAT=( python2_7 python3_{3,4} )
- PYTHON_COMPAT_OVERRIDE (用户变量)
- 在处理 ebuild 时,可以使用此变量覆盖 ebuild 中的 PYTHON_COMPAT。它是一个字符串,列出了软件包将为其构建的所有实现。它需要在调用环境中指定,而不是在 ebuild 中指定。
需要注意的是,为了保持元数据不变性,PYTHON_COMPAT_OVERRIDE 不会影响 IUSE 也不影响依赖项。PYTHON_TARGETS 的状态被忽略,并且构建 PYTHON_COMPAT_OVERRIDE 中的所有实现。需要手动满足依赖项。
示例
PYTHON_COMPAT_OVERRIDE='pypy python3_3' emerge -1v dev-python/foo
- PYTHON_REQ_USE
- 在所选 Python 实现上需要启用的 USE 标志列表,形成为 USE 依赖项字符串。它应该对 PYTHON_COMPAT 中的所有实现有效,因此可能需要使用 USE 默认值。
这应该在调用 `inherit` 之前设置。
示例
PYTHON_REQ_USE="gdbm,ncurses(-)?"
它将导致 Python 依赖项看起来像
python_targets_pythonX_Y? ( dev-lang/python:X.Y[gdbm,ncurses(-)?] )
- PYTHON_DEPS (由 ECLASS 生成)
- 这是 PYTHON_COMPAT 中列出的所有实现的 eclass 生成的 Python 依赖项字符串。
使用示例
RDEPEND="${PYTHON_DEPS} dev-foo/mydep" BDEPEND="${PYTHON_DEPS}"
示例值
python_targets_python2_7? ( dev-lang/python:2.7[gdbm] ) python_targets_pypy? ( dev-python/pypy[gdbm] )
- PYTHON_USEDEP (由 ECLASS 生成)
- 这是一个 eclass 生成的 USE 依赖项字符串,可用于依赖于为相同 Python 实现构建的另一个 Python 软件包。
使用示例
RDEPEND="dev-python/foo[${PYTHON_USEDEP}]"
示例值
python_targets_python2_7(-)?,python_targets_python3_4(-)?
- PYTHON_SINGLE_USEDEP (由 ECLASS 生成)
- 当前测试实现的 eclass 生成的 USE 依赖项字符串。它在 python_check_deps() 调用中本地设置。
生成的 USE 标志列表与使用 python-single-r1 eclass 的软件包兼容。对于 python-r1 依赖项,请使用 PYTHON_USEDEP。
使用示例
python_check_deps() { python_has_version "dev-python/bar[${PYTHON_SINGLE_USEDEP}]" }
示例值
python_single_target_python3_7(-)
- PYTHON_REQUIRED_USE (由 ECLASS 生成)
- 这是一个 eclass 生成的 required-use 表达式,它确保至少启用了一个 Python 实现。
此表达式应通过将其包含在 REQUIRED_USE 中(可选地在 use 标志后面)来在 ebuild 中使用。
使用示例
REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
示例值
|| ( python_targets_python2_7 python_targets_python3_4 )
- BUILD_DIR (由 ECLASS 生成)
- 当前构建目录。在全局范围内,它应该包含一个初始构建目录;如果未设置,则默认为 ${S}。
在 python_foreach_impl() 运行的函数中,BUILD_DIR 在本地设置为特定于实现的构建目录。该路径是通过将连字符和实现名称附加到初始 BUILD_DIR 的最后一个组件来创建的。
示例值
${WORKDIR}/foo-1.3-python2_7
作者
作者:Michał Górny <[email protected]>基于以下人员的工作:Krzysztof Pawlik <[email protected]>
维护者
Python 团队 <[email protected]>报告错误
请通过 https://bugs.gentoo.org/ 报告错误文件
python-r1.eclass另请参阅
ebuild(5)https://gitweb.gentoo.org/repo/gentoo.git/log/eclass/python-r1.eclass
索引
本文档由 man2html 使用手册页创建。
时间:2024年11月12日,格林威治标准时间03:27:01