开发者社区> 问答> 正文

使用make和Makefile从包含空格的文件路径中处理原始源数据

我有一个使用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 copy_data_to_local_folder)或目标将需要每次运行。

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

  1. *Use a different make tool.* I could use ` Luigi ` in Python or ` Drake ` in R, but I would prefer to keep the tool somewhat more generalized.

  2. *Run a setup script to copy in files.* I assume there would be a way to run the file copying scripts as part of the environment setup, but I am unfamiliar with how to do this.

我不确定执行此操作的最佳方法。我希望能够与同事共享代码,并让他们能够在他们的系统上启动并运行,而不会花费太多时间进行配置。是否有针对这种情况的最佳实践?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-23 16:06:46 722 0
1 条回答
写回答
取消 提交回答
  • 一种解决方法是:

    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文件存在时复制它们)跑)。自动变量$ |指仅订购的先决条件,它们不包含在$ ^中。

    回答来源:stackoverflow

    2020-03-23 16:07:02
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载