我正在 Yocto Zeus 中构建自定义 Linux 映像(之前使用过 Yocto Thud)。我已将所有必需的代码移至 Python3,因此不再需要 Python2。有没有一种方法可以从 Image 中完全删除 python2 及其模块
您可以使用这两个选项之一
PACKAGE_EXCLUDE:指定不应安装到映像中的包。
PACKAGE_EXCLUDE_pn-target_image = " python"
如果您选择不使用此变量安装包,并且其他一些包依赖于它(即在配方的 RDEPENDS 变量中列出),则 OpenEmbedded 构建系统会生成一个 致命的安装错误。因为构建系统会停止该过程 如果出现致命错误,您可以使用该变量进行迭代 从系统中删除特定组件的开发过程。
仅在使用 IPK 和 RPM 时才支持此变量 包装后端。不支持 DEB。 Yocto Mega 手册中的 PACKAGE_EXCLUDE 定义
PN黑名单:
PNBLACKLIST[python] = "Python2 Not supported by this distro."
列出您不希望 OpenEmbedded 构建系统构建的配方。 该变量与黑名单类结合使用,即 全球继承。
要防止构建配方,请在中使用 PNBLACKLIST 变量 你的 local.conf 文件。 Yocto Mega 手册中的 PNBLACKLIST 定义
从继承
core-image-minimal
的镜像开始并手动添加包。只有指定要在映像配方中显式安装的软件包以及在这些软件包的 RDEPENDS
和 RRECOMMENDS
中指定的软件包才会安装在配方中。
一些包也因为配置文件(机器、发行版或 local.conf)而被拉取。
如果有您不想要的
RRECOMMENDS
,您可以在图像配方中使用BAD_RECOMMENDATIONS
来要求图像不要将它们拉入。
如果它是您不想要的
RDEPENDS
,可能是因为您不需要的所选 PACKAGECONFIG
而被拉出,在这种情况下,为该配方创建一个 bbappend 并相应地设置 PACKAGECONFIG
。
如果仍然不行,您必须深入研究可以从
RDEPENDS
中删除的内容以及原因(这是一个错误吗?在不需要 RDEPENDS
的特定配置中是否安全) ?)。
知道哪个包正在拉取哪个包的方法是使用
-g
作为 bitbake 的参数。不要尝试从点文件创建方案/绘图/图像,它们太大,点无法正确处理(需要几个小时并且结果无法使用)。 "recipeA:do_foo" => "recipeB:do_bar"
表示 do_foo
中的 recipeA
任务取决于 do_bar
中的 recipeB
。
配置文件之一(local.conf 或 distro.conf)中的 PACKAGE_EXCLUDE
应该
还可以更轻松地识别哪个食谱需要您不想要的食谱。
我们可以使用另一种方法来解决这个问题,事实上它对我有用 创建一个名为 python3_remove(){rm -rf /usr/bin/python3* } 的函数并将此函数添加到 .bb 文件 i,e ROOTFS_POSTPROCESS_COMMAND += "python3_remove; " 在执行干净构建之后