python - 将Python monorepo应用程序集成到Yocto

原文 标签 python git yocto monorepo

在实际问题之前的一些上下文。随着我从事的项目的增长,用于我们正在开发的应用程序的存储库的数量也随之增长。到现在为止,不断对代码库进行修改已无法忍受:当在一个存储库中的核心库中进行了某些更改时,我们需要对使用该库的其他Python中间件项目进行调整。尽管这听起来并不可怕,但是在Yocto中进行管理已经成为一种负担:在Python库的每个版本上,我们都需要对所有相关项目进行修改。经过一番思考,我们决定尝试使用monorepo方法来处理复杂性。我省略了选择这种方法的逻辑,但是如果您认为这是错误的,我可以深入研究。

1)第一阶段很容易。只需将中间件的每个组件都放在一个存储库中即可。现在,我们有一个大型的存储库,其中包含超过git 20个子模块。一旦完成过渡,子模块将消失,但是由于在进行过渡时项目不会停止,因此选择了子模块来跟踪更改并保持Monorepo处于最新状态。每个子模块都是带有setup.py/Pipfile等的Python代码。进行引导。

2)第二阶段是将所有内容整合到Yocto中。事实证明,这比我预期的要困难得多。

现在我们有这个:

应用monorepo

Pipfile
python-library1/setup.py
python-library1/Makefile
python-library1/python-library1/<code>


python-library2/setup.py
python-library2/Makefile
python-library2/python-library2/<code>


...
python-libraryN/setup.py
python-libraryN/Makefile
python-libraryN/python-libraryN/<code>


自然,现在在Yocto中有python-library1_<some_version>.bbpython-library2_<some_other_version>.bb。现在,我们要摆脱该版本的地狱,并坚持使用monorepo版本,以便我们可以拥有monorepo_1.0.bb,以便在任何部分发生任何更改时进行更新。

现在我有这个monorepo_1.0.bb(实际上,由于这种方法不起作用,我想拥有它)

SRCREV=<hash>

require monorepo.inc


monorepo.inc如下:

SRC_URI=<gitsm://the location of the monorepo,branch=...,>
S = "${WORKDIR}/git"

require python-library1.inc
require python-library2.inc
...
require python-libraryN.inc



python-libraryN.inc:

S = "${WORKDIR}/git/python-libraryN"
inherit setuptools



这种方法由于多种原因而行不通。基本上,每个新的require都会将${S}覆盖到另一个git/python-library,唯一要构建的包是最后一个。

即使我知道这种方法不会最终成为最终解决方案,我只是想告诉您我一直在努力:非常简单的更新。我唯一需要做的就是更新SRCREV(或将来在部署时$$ {PV}),整个堆栈将保持最新状态。

那么,问题是如何构造用于Python monorepo操作的Yocto配方?

附言
1)monorepo结构不是一成不变的,因此,如果您有任何建议,我乐于接受任何批评
2).inc文件结构可能由于其他原因而不合适。该堆栈部署在许多不同的设备上,其中某些python-library_N.bb在针对该设备定制的其他层中具有.bbappends。我的意思是,其中一些可能需要安装系统的不同组件或进行一些配置和files/修改。

任何有关如何在Yocto中处理大型Python应用程序的复杂性的建议都将受到欢迎。提前致谢。

最佳答案

我目前正在调查与您相同的问题。

我发现boost库的配方也可以从“ monorepo”构建几个软件包。

该食谱可以在poky层中找到:
http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/recipes-support/boost

特别注意boost.inc文件,该文件将构建实际的软件包列表,而其他文件同时定义SRC_URI和各种修补程序。

希望能有所帮助!

相关文章:

python - 如何从Python中的OLSResults获取变量中的P值?

git - 有没有一种方法可以对Go项目中的导入使用可重用的路径?

c++ - 如何在Yocto的CMAKE projet构建中添加预处理器定义

python - 有没有办法在python中获取给定框架的函数参数的原始值?

c++ - 包括C ++文件CDT中的Python.h

python - 计算关于输入的深度神经网络的偏导数

embedded - 如何找出嵌入式Linux上哪个分区映射到哪种存储设备类型?

git - 多开发人员Git工作流程,保持干净的历史记录

git - 如何真正删除git分支(即删除所有对象/提交)?

linux - 找不到yocto-bsp命令