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 <mgorny@gentoo.org>基于以下人员的工作:Krzysztof Pawlik <nelchael@gentoo.org>
维护者
Python 团队 <python@gentoo.org>报告错误
请通过 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