Я после совета о том, как управлять модулями Python в контексте Docker.
Текущие опции, которые мне известны, включают:
- Установка их по отдельности через pip в процессе сборки
- Установка их вместе через pip в процессе сборки через
requirments.txt
- Установка их на том и добавление тома в PYTHONPATH
В идеале мне нужно решение, которое полностью воспроизводимо и не требует, чтобы каждый модульбыть переустановленным, если я решу добавить другой модуль или обновить версию одного из них.
С моей точки зрения:
(2) является проблемой, потому что команда docker ADD
(чтобы получить доступ к файлу requirements.txt
), по-видимому, делает кэш недействительным и означает, что любые изменения в файле означаютвсе необходимо перестраивать / переустанавливать каждый раз, когда вы создаете образ.
(1) сохраняет кэш-память нетронутым, но означает, что вам нужно будет указать точную версию для каждого пакета (и, возможно, их зависимости?), что выглядиткак это может быть довольно утомительно и подвержено ошибкам.
(3) в настоящее время является моим личным фаворитом, так как позволяет пакетам сохраняться между образами / сборками и позволяет использовать requirements.txt
.Единственным недостатком является то, что по сути вы храните пакеты на своем локальном компьютере, а не образ, что приводит к зависимости контейнера от операционной системы хоста, что в некоторой степени побеждает точку контейнера.
Так что яЯ не совсем уверен, какие здесь лучшие практики, и буду признателен за советы.
Для справки: есть другие вопросы по этой теме, но я не думаю, что кто-то из них правильно ответил на мой вопрос:
Докер с модифицированными модулями Python?
Docker составляет требования к установке. Txt
Как я могу установить модули Python в образ докера?
РЕДАКТИРОВАТЬ:
Просто некоторые дополнительные примечания, чтобы дать больше информацииконтекст.Мои проекты обычно ориентированы на анализ данных (а не на разработку программного обеспечения или веб-разработку).Я склонен использовать несколько изображений (1 для python, 1 для R, 1 для базы данных), используя docker compose для управления ими всеми вместе.До сих пор я использовал make-файл на хост-ОС для пересоздания проекта с нуля, то есть что-то вроде
some_output.pdf: some_input.py
docker-compose run python_container python some_input.py
, где выходные данные записываются в том на хост-ОС