使用 make 和 Makefiles 从包含空格的文件路径处理原始源数据
Working from raw source data from a filepath containing spaces using make and Makefiles
我有一个使用 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
)的 DAG 中,否则
目标每次都需要运行。
我的解决思路如下,但我不确定什么是最佳实践:
使用不同的制作工具。 我可以在 Python 中使用 Luigi
或在 R 中使用 Drake
,但是我宁愿保留
该工具更通用。
运行 要复制到文件中的设置脚本。 我想会有一种方法可以 运行 文件复制脚本
作为环境设置的一部分,但我不熟悉如何执行此操作。
我不确定执行此操作的最佳方法。我希望能够与同事共享代码并让他们
能够在他们的系统上启动和 运行ning 而无需太多的配置。有没有最好的
针对这种情况练习?
一个修复方法是:
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
仅作为先决条件,因此它们仅在它们不存在时才生成(除非您希望每次生成文件时都复制它们是 运行)。自动变量 $|
指的是仅限订单的先决条件,它们不包含在 $^
.
中
我有一个使用 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
)的 DAG 中,否则
目标每次都需要运行。
我的解决思路如下,但我不确定什么是最佳实践:
使用不同的制作工具。 我可以在 Python 中使用
Luigi
或在 R 中使用Drake
,但是我宁愿保留 该工具更通用。运行 要复制到文件中的设置脚本。 我想会有一种方法可以 运行 文件复制脚本 作为环境设置的一部分,但我不熟悉如何执行此操作。
我不确定执行此操作的最佳方法。我希望能够与同事共享代码并让他们 能够在他们的系统上启动和 运行ning 而无需太多的配置。有没有最好的 针对这种情况练习?
一个修复方法是:
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
仅作为先决条件,因此它们仅在它们不存在时才生成(除非您希望每次生成文件时都复制它们是 运行)。自动变量 $|
指的是仅限订单的先决条件,它们不包含在 $^
.