'no module named setuptools' 但它包含在 DEPENDS 变量中

'no module named setuptools' but it is contained in the DEPENDS variable

此问题涉及 Openembedded/Yocto。

我有源代码需要通过自定义 python3 脚本编译。 这意味着,某些 python3 脚本在 do_compile() 过程中应该 运行。 该脚本导入 setuptools,因此,我在配方中添加了 DEPENDS += "python3-setuptools-native"。据我了解文档,这应该使 setuptools 模块可用于构建过程(本机)。 但是当 bitbake 执行 do_compile() 过程时,我得到这个错误: no module named 'setuptools'.

让我把它分解成一个最小的(非)工作示例:

文件:test.bb

LICENSE = "BSD"
LIC_FILES_CHKSUM = "file://test/LICENSE;md5=d41d8cd98f00b204e9800998ecf8427e"

DEPENDS += "python3-setuptools-native"

SRC_URI = "file://test.py \
           file://LICENSE"

do_compile() {
    python3 ${S}/../test.py
}

文件:test.py

import setuptools

print("HELLO")

bitbaking:

$ bitbake test
ERROR: test-1.0-r0 do_compile: Function failed: do_compile (log file is located at /path/to/test/1.0-r0/temp/log.do_compile.8532)
ERROR: Logfile of failure stored in: /path/to/test/1.0-r0/temp/log.do_compile.8532
Log data follows:
| DEBUG: Executing shell function do_compile
| Traceback (most recent call last):
|   File "/path/to/test-1.0/../test.py", line 1, in <module>
|     import setuptools
| ImportError: No module named 'setuptools'
| WARNING: exit code 1 from a shell command.
| ERROR: Function failed: do_compile (log file is located at /path/to/test/1.0-r0/temp/log.do_compile.8532)
ERROR: Task (/path/to/test.bb:do_compile) failed with exit code '1'
NOTE: Tasks Summary: Attempted 400 tasks of which 398 didn't need to be rerun and 1 failed.
NOTE: Writing buildhistory

Summary: 1 task failed:
  /path/to/test.bb:do_compile
Summary: There was 1 ERROR message shown, returning a non-zero exit code.

我的预期是否错误,DEPENDS += "python3-setuptools-native" 使 python3 模块 'setuptools' 可用于 do_compile() 中的 python3 脚本?我怎样才能做到这一点?

在后台需要做更多的工作才能获得有效的设置工具支持。幸运的是有一个 class 来处理这个问题:

inherit setuptools3

这应该是将基于 setuptools 的项目与 OE-Core 打包所需的全部内容。只要您的项目具有标准 setup.py,您就不需要编写任何 do_compile() 或 do_install() 函数。

如果您确实需要查看详细信息,meta/classes/setuptools3.bbclassmeta/classes/distutils3.bbclass 应该包含您需要的内容(包括从食谱中调用本机 python 的相当不明显的方法)。