在Yocto中彻底删除Python2及相关组件

问题描述 投票:0回答:3

我正在 Yocto Zeus 中构建自定义 Linux 映像(之前使用过 Yocto Thud)。我已将所有必需的代码移至 Python3,因此不再需要 Python2。有没有一种方法可以从 Image 中完全删除 python2 及其模块

python-3.7 embedded-linux yocto bitbake openembedded
3个回答
3
投票

您可以使用这两个选项之一

  1. PACKAGE_EXCLUDE:指定不应安装到映像中的包。

    PACKAGE_EXCLUDE_pn-target_image = " python"
    

如果您选择不使用此变量安装包,并且其他一些包依赖于它(即在配方的 RDEPENDS 变量中列出),则 OpenEmbedded 构建系统会生成一个 致命的安装错误。因为构建系统会停止该过程 如果出现致命错误,您可以使用该变量进行迭代 从系统中删除特定组件的开发过程。

仅在使用 IPK 和 RPM 时才支持此变量 包装后端。不支持 DEB。 Yocto Mega 手册中的 PACKAGE_EXCLUDE 定义

  1. PN黑名单

    PNBLACKLIST[python] = "Python2 Not supported by this distro."
    

列出您不希望 OpenEmbedded 构建系统构建的配方。 该变量与黑名单类结合使用,即 全球继承。

要防止构建配方,请在中使用 PNBLACKLIST 变量 你的 local.conf 文件。 Yocto Mega 手册中的 PNBLACKLIST 定义


2
投票

从继承

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
应该 还可以更轻松地识别哪个食谱需要您不想要的食谱。


0
投票

我们可以使用另一种方法来解决这个问题,事实上它对我有用 创建一个名为 python3_remove(){rm -rf /usr/bin/python3* } 的函数并将此函数添加到 .bb 文件 i,e ROOTFS_POSTPROCESS_COMMAND += "python3_remove; " 在执行干净构建之后

© www.soinside.com 2019 - 2024. All rights reserved.