Работа с необработанными исходными данными из файлового пути, содержащего пробелы, с использованием make и Makefiles - PullRequest
0 голосов
/ 18 марта 2020

У меня есть репозиторий, который использует python сценарии и Makefile. Я хочу, чтобы процедура установки позволила им легко настроить среду и скопировать необходимые файлы данных с нашего сервера.

Проблема с включением файлов исходных данных в Makefile заключается в том, что сервер компании использует пробелы в имени диска, что делает make, не очень нравится, поэтому я могу перечислить эти файлы как зависимости для целевого выходного файла.

Мой текущий Makefile в основном делает только следующее:

.PHONY : all
all : output.csv

.PHONY : copy_data_to_local_folder
copy_data_to_local_folder :
    python copyfile.py "V:\\Server Path\\With Spaces\\Inputs 1.csv" local/inputs1.csv
    python copyfile.py "V:\\Server Path\\With Spaces\\Inputs 2.csv" local/inputs2.csv

output.csv : combine_data.R local/inputs1.csv local/inputs2.csv
    Rscript $^ $@

Часть copy_data_to_local_folder предназначена только для передачи данных в локальный каталог, но она не включена в группу обеспечения доступности баз данных, что приводит к созданию output.csv (т. Е. all : output.csv copy_data_to_local_folder), в противном случае цель должна быть запущена каждый раз.

Мои идеи решения следующие, но я не уверен, что лучше всего практиковать:

  1. Использовать другой инструмент make. I можно использовать Luigi в Python или Drake в R, но я бы предпочел сделать инструмент несколько более обобщенным.

  2. Запустить сценарий установки для копирования в файлы. Я предполагаю, Это был бы способ запустить сценарии копирования файлов как часть установки среды, но я не знаю, как это сделать.

Я не уверен в том, как лучше всего это сделать. это. Я хочу иметь возможность поделиться кодом с коллегами, чтобы они могли приступить к работе в своей системе, не тратя время на настройку. Есть ли лучшая практика для этой ситуации?

1 Ответ

1 голос
/ 18 марта 2020

Одно исправление будет выглядеть следующим образом:

local/inputs1.csv :
    python copyfile.py "V:\\Server Path\\With Spaces\\Inputs 1.csv" $@
local/inputs2.csv :
    python copyfile.py "V:\\Server Path\\With Spaces\\Inputs 2.csv" $@

output.csv : combine_data.R | local/inputs1.csv local/inputs2.csv
    Rscript $^ $| $@

Обратите внимание, что local/inputs1.csv и local/inputs2.csv являются предварительными условиями только для заказа, поэтому они создаются только тогда, когда их не существует (если вы не нравится копировать их каждый раз при запуске make-файла). Автомат c переменная $| относится к предпосылкам только для заказа, они не включены в $^.

...