将Python monorepo应用程序集成到Y中

2024-06-13 12:53:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

1)第一阶段很简单。只需将中间件的每个组件都放到一个存储库中。现在我们有一个大的存储库,有超过20个子模块。子模块将消失,一旦我们完成了过渡,但由于项目没有停止,而我们正在做的过渡,子模块被选择跟踪的变化,并保持monorepo最新。每个子模块都是带有setup.py/pip文件等等,这就是自举。你知道吗

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\u1.0.bb(实际上,我想有一个,因为这种方法不起作用)

SRCREV=<hash>

require monorepo.inc

monorepo公司如下:

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-图书馆公司:

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

由于多种原因,这种方法不起作用。基本上,每一个新的require都将${S}覆盖到另一个git/python-library,唯一要构建的包就是最后一个。你知道吗

尽管我知道这种方法不会最终成为最终的解决方案,但我只想告诉你我一直努力的目标:非常简单的更新。我唯一需要做的就是更新SRCREV(或者${PV}在将来部署它的时候),整个堆栈都会更新。你知道吗

所以,问题是如何构造pythonmonorepo操作的Yocto配方?你知道吗

附言。 1) 单一回购结构不是一成不变的,所以如果你有任何建议,我非常愿意接受任何批评 2) .inc文件结构可能由于其他原因不适合。这个堆栈部署在十几个不同的设备上,其中一些python-library_N.bb在为设备定制的其他层中有.bbappends。我的意思是,其中一些可能需要安装不同的系统组件,或者需要一些配置和files/修改。你知道吗

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


Tags: 模块项目方法py版本setuprequiremakefile