Lau*_*t S 5 python docker docker-compose python-poetry
我有 2 个 python 应用程序共享一些代码,足以让我尝试将共享部分隔离到模块/包/库中(我故意使术语含糊不清,因为我不确定解决方案是什么) 。我的所有代码都在单一存储库中,因为我希望克服管理比我们团队成员更多的存储库的一些烦恼。
目前我的文件布局如下所示:
+ myproject
+ appA
| + python backend A
| + js frontend
+ appB
| + B stuff
+ libs
+ lib1
+ lib2
Run Code Online (Sandbox Code Playgroud)
和appA都appB使用lib1和lib2(它们本质上是抽象共享数据库的数据模型)。appA是一个具有多个组件的Web应用程序,并非所有组件都是Python的。它被部署为涉及一堆容器的 Docker 堆栈。我用诗歌来管理我的依赖关系,以确保可重复的构建等...每个 python 组件(appA,appB...)都有自己的pyproject.toml文件,虚拟环境等...
appB是单独部署的。
如果有什么区别的话,所有开发都在 Linux 上进行。
我正在寻找一种干净的方法来处理库:
appA是在本地docker-compose设置中完成的。后端会在文件更改时自动重新加载(使用 docker 卷),我希望库中的更改也能发生这种情况。appB更简单,但正在迁移到 docker,所以问题将是相同的。appA. 它适用于导入,但一旦我想更改库代码(这仍然很常见),它就会很混乱,因为我需要更改原始文件,复制,重建容器。poetry add ../../libs/lib1,因为路径不匹配,所以在 docker 中实际上不起作用,然后我又回到了符号链接问题。我确信有一种干净的方法可以做到这一点,但我无法弄清楚。我知道我可以将存储库分解为较小的存储库并安装依赖项,但开发仍然会在 docker 内部引起问题,因为每次更改 lib 文件时我仍然需要重建容器,所以我宁愿保留 monorepo。
如果您无论如何都使用 docker-compose,则可以使用卷将本地库挂载到容器中,并能够在主机系统和容器中编辑它们。不是很花哨,但是应该可以,对吧?
@ckaserer 你的建议似乎确实有效。简而言之,在 docker 文件中,我执行 COPY ../libs/lib1 /app/lib1 ,然后为了本地开发,我将 ../libs/lib1 挂载到 /app/lib1 上。这给了我我正在寻找的行为。我为此使用了一个分割的 docker-compose 文件。该设置会导致各种工具出现一些问题,需要一些额外的配置,以便他们知道这些库是代码库的一部分,但没有什么不可能的。谢谢你的主意!
因此,尽管这不是一个理想的解决方案,但通过 app 和 lib 目录本地安装也可以在 Linux 系统上工作。
仅供参考:在 Windows 主机上,如果您想监视文件更改,您可能会遇到麻烦,因为文件更改不会从 Windows 主机传播到 Linux 容器。
| 归档时间: |
|
| 查看次数: |
2197 次 |
| 最近记录: |