首页 > 解决方案 > Python创建依赖项的makefile

问题描述

我有一个基于 Makefile 的项目和一些创建绘图文件的 python 脚本,例如(在我的 Makefile 中)

plot.pdf: my_script.py
    python my_script.py -o $@

通常这些脚本依赖于数据,例如my_data.txt,所以我将它添加到我的 Makefile

plot.pdf: my_script.py my_data.txt
    python my_script.py -o $@

这非常麻烦,因为我需要使 Makefile 和 python 脚本保持同步。所以我切换到从 python 脚本中导出 Make 规则:

plot.pdf: my_script.py
    python my_script.py -o $@ --make-mode

--make-mode将编写一个 Makefile 说明 on 的依赖plot.pdf关系 my_data.txt。我的 Makefile 设置为获取所有这些自动生成的 Makefile。

为了在我更改我的 python 脚本时支持增量构建,我声明了 on 的依赖plot.pdf关系my_script.py。但my_script.py也取决于我写的其他python脚本。如果我更改这些脚本,例如utils.py,我的文件plot.pdf将不会更新。有没有办法从 python 中获取导入的 python 脚本的文件路径,所以我可以将它们添加到我的自动生成的 Makefile 中?或者你能推荐一种替代方法吗?

标签: pythonmakefile

解决方案


最后我找到了一个让我高兴的答案:

import sys
print('\n'.join(
     [modu.__file__ for modu in sys.modules.values() 
          if '__file__' in dir(modu) 
          and modu.__file__ is not None]
))

其中包含系统 python 脚本以及我的用户脚本。


推荐阅读