gpt4 book ai didi

python - 如何使用 docker 和 monorepo 组织共享库

转载 作者:行者123 更新时间:2023-12-02 18:07:08 26 4
gpt4 key购买 nike

是)我有的

我有 2 个共享一些代码的 python 应用程序,足以让我尝试将共享部分隔离到模块/包/库中(我故意使术语含糊不清,因为我不确定解决方案是什么) .我所有的代码都在一个 monorepo 中,因为我希望克服管理比团队成员更多的 repo 的一些烦恼。

目前我的文件布局如下:

+ myproject
+ appA
| + python backend A
| + js frontend
+ appB
| + B stuff
+ libs
+ lib1
+ lib2

两个 appAappB使用 lib1lib2 (它们本质上是抽象出共享数据库的数据模型)。 appA是一个有几个组件的webapp,并不是所有的都是python。它被部署为一个涉及一堆容器的 docker 堆栈。
我使用 poetry 管理我的依赖项以确保可重现的构建等...每个 python 组件( appAappB ...)都有自己的 pyproject.toml文件,虚拟环境等...
appB是单独部署的。

如果有什么不同的话,所有的开发都在 linux 上。

我需要的

我正在寻找一种干净的方式来处理库:
  • appA 的开发在本地 docker-compose 中完成设置。后端在文件更改时自动重新加载(使用 docker 卷),我希望它也发生在库中的更改上。
  • appB 的开发更简单,但正在迁移到 docker,所以问题是一样的。

  • 我试过的
  • 我最初的“解决方案”是将 libs 文件夹复制到 appA 中的一个临时位置进行开发。 .它适用于导入,但是一旦我想更改库代码(这仍然很常见),它就会很困惑,因为我需要更改原始文件,复制,重建容器。
  • 我尝试将库符号链接(symbolic link)到后端的 docker 环境中,但符号链接(symbolic link)似乎不适用于 docker(它似乎没有跟随链接,所以文件不会最终出现在 docker 镜像中,除非我基本上复制了docker build 上下文中的文件,这违背了链接的目的。)
  • 我已经尝试将每个库打包成一个 python 包,并通过 poetry add ../../libs/lib1 安装它们这在 docker 中实际上不起作用,因为路径不匹配,然后我回到符号链接(symbolic link)问题。

  • 我确信有一种干净的方法可以做到这一点,但我无法弄清楚。我知道我可以将 repo 分解成更小的 repo 并安装依赖项,但是开发仍然会在 docker 内部引起问题,因为每次更改 lib 文件时我仍然需要重建容器,所以我宁愿保留 monorepo。

    最佳答案

    如果您仍然使用 docker-compose,您可以使用卷将本地库挂载到您的容器中,并能够在您的主机系统和容器中编辑它们。不是 super 花哨,但这应该有效,对吧?

    @ckaserer your suggestion seems to work, indeed. In short, in the docker files I do COPY ../libs/lib1 /app/lib1 and then for local development, I mount ../libs/lib1 onto /app/lib1. That gives me the behavior I was looking for. I use a split docker-compose file for this. The setup causes a few issues with various tools needing some extra config so they know that the libs are part of the code base, but nothing impossible. Thanks for the idea!



    因此,即使它不是本地安装在应用程序和 lib 目录上的理想解决方案,也适用于 Linux 系统。

    仅供引用 :在 Windows 主机上,如果您想监视文件更改,则可能会遇到麻烦,因为文件更改不会从 Windows 主机传播到 Linux 容器。

    关于python - 如何使用 docker 和 monorepo 组织共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60401518/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com