#docker #python-poetry
#docker #python-поэзия
Вопрос:
Я столкнулся с проблемой, с которой мне нужна помощь.
Мы работаем над проектом, который является докеризированным и выполняется в стеке docker-compose. Наш код смонтирован в контейнере, чтобы обеспечить возможность перезагрузки изменений в реальном времени. Но в этом проекте используется собственная библиотека, которая может потребовать изменений. Цель состояла бы в том, чтобы эта библиотека также была смонтирована в контейнере, поскольку в настоящее время единственный способ — установить ее poetry add ../ArcheologCommon
и запустить все локально (без docker). Это настоящая проблема, поскольку у нас есть много конфигураций и более 7 сервисов для запуска
Первым решением, которое я нашел, было смонтировать мой локальный venv в контейнер, но это не работает по нескольким причинам:
- Монтирование всего venv приводит к жестко заданным абсолютным путям в
env/bin/activate
папке, которые могут использоваться только хостом. - Монтируйте только
venv/lib
папку, чтобы избежать этой проблемы с жестко заданным путем.
Это работает очень хорошо, пока я не запустил poetry add ../ArcheologCommon
, что дает мне ModuleNotFoundError: No module named 'archeolog_common'
исключение в моем контейнере.
Оглядываясь на то, что poetry сделала в моем venv, я обнаружил, что моя библиотека стала *.egg-link
файлом, содержащим абсолютный путь к моей библиотеке на моем ноутбуке
~/ ➤ docker exec -ti backend bash
www-data@467190e2f634:~/backend$ cat .venv/lib/python3.8/site-packages/archeolog-common.egg-link
/home/path/to/ArcheologCommon
Единственное решение, которое я нашел, — это смонтировать мою локальную копию кода непосредственно в пакеты сайта venv вместо уже присутствующего там кода:
services:
backend:
command: server.py --bind 0.0.0.0 --port 9000 --reload-dir /var/www/backend --reload-dir /opt/venv/lib/python3.8/site-packages/archeolog_common
# [ ...]
volumes:
- ...
- ../../ArcheologCommon/archeolog_common:/opt/venv/lib/python3.8/site-packages/archeolog_common:ro
В результате изменения обнаруживаются правильно и работают нормально.
WARNING: StatReload detected file change in '/opt/venv/lib/python3.8/site-packages/archeolog_common/models/graph.py'. Reloading...
INFO: Shutting down
INFO: Finished server process [156]
INFO: Started server process [191]
Я думаю, что это ужасное решение (которое работает, поэтому я все еще отдаю ему должное), но мне интересно, есть ли какие-нибудь лучшие решения?
PS: Я нашел похожие проблемы в SO по этому поводу, но ни одна из них не касалась использования всего в контейнерах Docker, что является моим основным требованием, поскольку работать за пределами нашего стека docker-compose очень сложно.
Спасибо, что прочитали меня!
Комментарии:
1. решает ли проблему создание образа docker с исходными текстами python в виртуальной среде и зависимостями, включая стороннюю библиотеку?