Заставить «make» перезапустить только те части конвейера, которые идут после того, что изменилось - PullRequest
0 голосов
/ 05 июля 2018

Я использую make, я полагаю GNU Make на WSL. Я использую это для науки о данных, опираясь на cookiecutter-datascience.

Прежде чем я начал использовать make, я думал, что нужно отслеживать, какие части конвейера изменились, и только повторно запускать этапы в конвейере после него .

Вот фрагмент из файла makefile:

## Install Python Dependencies
requirements: test_environment
    pip install -U pip setuptools wheel
    pip install -r requirements.txt

## Make Dataset
data: requirements
    $(PYTHON_INTERPRETER) src/data/make_dataset.py

Когда я запускаю make data, он не только повторно запускает часть данных конвейера и последующих этапов, но также перезапускает make requirements и make test_environment. Но это напротив того, что я хочу. Эти стадии наступают до , а не после . Если у меня есть дорогой конвейер, я, очевидно, не хочу запускать его снова и снова.

В моем случае я хочу, чтобы: если один из необработанных (необработанных) файлов данных был изменен, я бы хотел, чтобы он перезапустил предварительную обработку данных. Это не должно включать в себя такие вещи, как отслеживание того, изменились ли библиотеки, потому что эти шаги логически предшествовали предварительной обработке данных.

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете попробовать это:

## Install Python Dependencies
requirements.done: test_environment.done
    pip install -U pip setuptools wheel
    pip install -r requirements.txt
    touch requirements.done

## Make Dataset
data: requirements.done
    $(PYTHON_INTERPRETER) src/data/make_dataset.py

Make сравнивает дату последней модификации файлов. Ваши requirements, test_environment ... не являются файлами, они являются так называемыми " фальшивыми " целями. Поскольку они не существуют, попытайтесь их построить, как только они понадобятся. Если вы хотите, чтобы make обнаружил, что что-то обновлено и не нуждается в восстановлении, вы должны использовать файлы. Предлагаемое решение использует пустые, фиктивные файлы (файлы *.done) вместо ваших фальшивых целей. Эти файлы используются только для хранения даты действий во время их последнего изменения.

Конечно, вы можете использовать файлы с именами requirements, test_environment ... если хотите. Расширение .done - это просто способ идентифицировать эти файлы как фиктивные маркеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...