我有的
我有 2 个共享一些代码的 python 应用程序,足以让我尝试将共享部分隔离到模块/包/库中(我故意使术语含糊不清,因为我不确定解决方案是什么) . 我所有的代码都在一个 monorepo 中,因为我希望克服管理比团队成员更多的 repo 的一些烦恼。
目前我的文件布局如下:
+ myproject
+ appA
| + python backend A
| + js frontend
+ appB
| + B stuff
+ libs
+ lib1
+ lib2
两者都appA
使用appB
and lib1
(lib2
它们本质上是抽象共享数据库的数据模型)。appA
是一个有几个组件的webapp,并不是所有的都是python。它被部署为一个涉及一堆容器的 docker 堆栈。我用诗歌管理我的依赖关系,以确保可重现的构建等......每个python组件(appA
,appB
......)都有自己的pyproject.toml
文件,虚拟环境等......
appB
是单独部署的。
如果有什么不同的话,所有的开发都在 linux 上。
我需要的
我正在寻找一种干净的方式来处理库:
- 的开发
appA
是在本地docker-compose
设置中完成的。后端在文件更改时自动重新加载(使用 docker 卷),我希望它也发生在库中的更改上。 - 开发
appB
更简单,但正在转移到 docker,所以问题是一样的。
我试过的
- 我最初的“解决方案”是将 libs 文件夹复制到一个临时位置以便在
appA
. 它适用于导入,但是一旦我想更改库代码(这仍然很常见),它就会很混乱,因为我需要更改原始文件,复制,重建容器。 - 我尝试将库符号链接到后端的 docker 环境中,但符号链接似乎不适用于 docker(它似乎没有跟随链接,因此文件不会最终出现在 docker 映像中,除非我基本上复制了docker build 上下文中的文件,这违背了链接的目的。)
- 我已经尝试将每个库打包到一个 python 包中,并通过
poetry add ../../libs/lib1
它在 docker 中安装它们,因为路径不匹配,然后我回到了符号链接问题。
我确信有一种干净的方法可以做到这一点,但我无法弄清楚。我知道我可以将 repo 分解成更小的 repo 并安装依赖项,但是开发仍然会在 docker 内部引起问题,因为每次更改 lib 文件时我仍然需要重建容器,所以我宁愿保留 monorepo。