Python创建依赖项的生成文件

时间:2018-10-09 07:50:13

标签: 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,该文件指出plot.pdfmy_data.txt的依赖性。我的Makefile设置为获取所有这些自动生成的Makefile。

为了在我更改python脚本时支持增量构建,我声明了plot.pdfmy_script.py的依赖性。但是my_script.py也取决于我编写的其他python脚本。如果我更改这些脚本,例如utils.py,我的文件plot.pdf将不会更新。 是否可以从python中获取导入的python脚本的文件路径,以便将其添加到自动生成的Makefile中?还是可以推荐一种替代方法?

3 个答案:

答案 0 :(得分:2)

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

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脚本以及我的用户脚本。

答案 1 :(得分:0)

每个导入的python脚本都可以作为模块使用。此模块公开包含脚本文件名的__file__属性:

import my_other_script
print(my_other_script.__file__)

答案 2 :(得分:0)

可以通过一种方式完成此操作,例如,如果我想知道os模块的位置。

isLoading

结果

import os
path = os.path.abspath(os.__file__)
print (path)

path = os.path.dirname(os.__file__)
print (path)