Я не уверен, возможно ли это, но мне интересно, можно ли смонтировать только, скажем, *.py
файлы с частью volumes
из fig.yml
.
Я пытаюсь смонтировать каталог, в котором есть пакет python. Мой Dockefile выглядит так:
FROM python:3
ADD . /code/
WORKDIR /code
RUN pip install -r requirements-testing.txt -e .
ENV LC_ALL C.UTF-8
ENV LANG C.UTF-8
Проблема в том, что когда у меня есть fig.yml
вроде этого:
python:
build: .
volumes:
- .:/code/
И затем запустите, попробуйте запустить CLI, установленный с моим приложением Python, это не сработает, потому что pip install -e .
создает некоторые каталоги со встроенным пакетом python под /code/
. Затем, когда я монтирую свой локальный каталог исходного кода над этим каталогом, он удаляет этот каталог сборки, и команда не выполняется.
$ fig run python dc-campaign-finance-scraper
Traceback (most recent call last):
File "/usr/local/bin/dc-campaign-finance-scraper", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/local/lib/python3.4/site-packages/pkg_resources.py", line 2697, in <module>
working_set.require(__requires__)
File "/usr/local/lib/python3.4/site-packages/pkg_resources.py", line 669, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/local/lib/python3.4/site-packages/pkg_resources.py", line 572, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: dc-campaign-finance-scraper==0.5.1
Так что, если бы я мог монтировать только файлы .py
, он бы не перезаписал все остальное. Я не уверен, возможно ли это удаленно, а если нет, есть ли у вас какие-либо советы по использованию fig для разработки пакетов python /
Боюсь, это невозможно с томами Docker.
Можно ли получить pip install
чтобы поместить файлы в другой каталог, за пределами /code
, и настроить Python для просмотра туда? Просматривая документы Pip , похоже, что --root
или --target
могут помочь.
Лучшее решение, которое я нашел, заключалось в монтировании фактических каталогов кода и тестов, а остальные файлы оставались нетронутыми.
Таким образом, исходные файлы будут обновлены без перекомпоновки, но не будут перезаписывать скомпилированные файлы.
python:
build: .
volumes:
- dc_campaign_finance_scraper:/code/dc_campaign_finance_scraper
- test:/code/test
Это сводило меня с ума на несколько часов, спасибо
Самый полезный комментарий
Лучшее решение, которое я нашел, заключалось в монтировании фактических каталогов кода и тестов, а остальные файлы оставались нетронутыми.
Таким образом, исходные файлы будут обновлены без перекомпоновки, но не будут перезаписывать скомпилированные файлы.