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

标签 python git yocto monorepo

在实际问题之前有一点背景。随着我参与的项目的增长,用于我们正在开发的应用程序的存储库数量也在增长。以至于不断修改代码库变得难以忍受:当一个存储库中的核心库发生更改时,我们需要对使用该库的其他 Python 中间件项目进行调整。虽然这听起来并不可怕,但在 Yocto 中管理它已成为一种负担:在 Python 库的每个版本升级中,我们还需要升级所有依赖项目。经过一番思考,我们决定尝试使用 monorepo 方法来处理复杂性。我省略了选择这种方法背后的逻辑,但如果你认为这是错误的,我可以深入研究它。

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

2) 阶段 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>

当然,现在我们有 python-library1_<some_version>.bb , python-library2_<some_other_version>.bb在约克托。现在我们想摆脱这个版本的 hell 并坚持使用 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 monorepo 应用程序集成到 Yocto 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59093345/

相关文章:

GitHub 同步不工作。 git push super 慢

android - 如何将项目恢复到android studio中的先前提交

yocto - 使用 Yocto 构建 gstreamer

python - 分类指标无法处理二进制目标和连续目标的混合

python 阶乘级数匹配范围内的第一对

git - 重击 : atom: command not found how to resolve this in windows?

python - 如何为 unicode ucs4 构建 numpy

opencv - Yocto如何添加一个gstreamer插件?

python - 使用 tkinter -- 如何清除FigureCanvasTkAgg 对象(如果存在或类似)?

python - 在Hadoop集群中运行代码时Mapper.py和Reducer.py中面临的问题