Python 使用make和makefile从包含空格的文件路径中的原始源数据工作

Python 使用make和makefile从包含空格的文件路径中的原始源数据工作,python,python-3.x,makefile,data-science,gnu-make,Python,Python 3.x,Makefile,Data Science,Gnu Make,我有一个使用python脚本和Makefile的存储库。我想有一个安装程序 允许他们轻松设置环境并从我们的服务器复制必要的数据文件 在Makefile中包含源数据文件的问题在于公司服务器使用 驱动器名中的空格,make不太喜欢,所以我可以将这些文件列为依赖项 对于目标输出文件 我当前的Makefile基本上只执行以下操作: .PHONY : all all : output.csv .PHONY : copy_data_to_local_folder copy_data_to_local_fo

我有一个使用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
部分只是将数据复制到本地目录,但不包括在内 在DAG中生成
output.csv
(即
all:output.csv复制\u数据\u到\u本地\u文件夹
)或 目标每次都需要运行

我的解决方案想法如下,但我不确定什么是最佳实践:

  • 使用不同的make工具。我可以在Python中使用
    Luigi
    ,或者在R中使用
    Drake
    ,但我更愿意保留 该工具更具通用性

  • 运行安装脚本以在文件中复制。我假设有一种方法可以运行文件复制脚本 作为环境设置的一部分,但我不熟悉如何执行此操作

  • 我不确定最好的方法是什么。我希望能够与同事共享代码,并拥有他们 能够在他们的系统上启动并运行,而无需进行太多的配置。有最好的吗 针对这种情况的实践?

    一种修复方法是:

    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
    是仅按订单制作的先决条件,因此它们仅在不存在时制作(除非您希望在每次运行makefile时复制它们)。自动变量
    $|
    只引用订单先决条件,它们不包括在
    $^

    中,我不知道这个功能存在,这非常有用。谢谢@teepee这2条重复规则可能可以替换为1条模式规则(一行):
    local/inputs%.csv:;python copyfile.py“V:\\Server Path\\With Spaces\\Inputs$*.csv”$@
    谢谢,Maxim。我想这样做的问题是本地文件名将保留其任何空格,因为我无法使用该规则指定其他名称,对吗?@teepee该模式规则使用与原始规则相同的本地名称创建文件-
    local/inputsN.csv