我有一个使用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)或目标将需要每次运行。
我的解决方案思路如下,但是我不确定什么是最佳实践:
*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.
*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
一种解决方法是:
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。