Что у меня есть
У меня есть 2 python приложения, которые совместно используют несколько кусков кода, этого достаточно, чтобы я пытался выделить общие части в модули / пакеты / библиотеки (я придерживаюсь этого термина намеренно расплывчато, так как я не уверен, что решение). Весь мой код написан в монорепо, потому что я надеюсь преодолеть некоторые неудобства, связанные с управлением большим количеством репозиториев, чем у нас есть члены команды.
В настоящее время мой макет файла выглядит следующим образом:
+ myproject
+ appA
| + python backend A
| + js frontend
+ appB
| + B stuff
+ libs
+ lib1
+ lib2
И appA
, и appB
используют lib1
и lib2
(они по сути являются моделями данных для абстрагирования общей базы данных). appA
- это веб-приложение с несколькими компонентами, не все из которых python. Он развернут как стек docker, который включает в себя несколько контейнеров. Я управляю своими зависимостями с помощью Стихи для обеспечения воспроизводимых сборок и т. Д. c ... Каждый компонент python (appA
, appB
...) имеет собственный файл pyproject.toml
, виртуальный env, et c ...
appB
развертывается отдельно.
Вся разработка ведется на linux, если это имеет значение.
Что я need
Я ищу простой способ справиться с библиотеками:
- Разработка для
appA
выполняется в локальной docker-compose
установке. Бэкэнд автоматически перезагружается при изменениях файлов (с использованием тома docker), и я хотел бы, чтобы это происходило и с изменениями в библиотеках. - Разработка для
appB
проще, но переходит на docker так что проблема будет та же.
То, что я пробовал
- Моим первоначальным "решением" было скопировать папку libs во временную папку для развитие в
appA
. Это работает для импорта, но это грязно, как только я хочу изменить код libs (который все еще довольно часто), так как мне нужно изменить исходный файл, скопировать, перестроить контейнер. - Я пытался символическая ссылка libs в среду docker бэкэнда, но символические ссылки, похоже, не работают с docker (похоже, он не следовал по ссылке, поэтому файлы не попадают в образ docker, если только По сути, я копирую файлы внутри контекста сборки docker, что противоречит цели ссылки.)
- Я попытался упаковать каждую библиотеку в пакет python и установить их через
poetry add ../../libs/lib1
, что не на самом деле не работает внутри docker, потому что пути не совпадают, и тогда я возвращаюсь к проблеме символической ссылки.
Я уверен, что есть чистый способ сделать это, но я не могу понять это. Я знаю, что могу разбить репо на более мелкие и установить зависимости, но разработка все равно будет вызывать проблемы внутри docker, так как мне все равно придется перестраивать контейнер каждый раз, когда я изменяю lib-файлы, поэтому я бы предпочел оставить монорепо .