我有一个基于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.pdf
对my_data.txt
的依赖性。我的Makefile设置为获取所有这些自动生成的Makefile。
为了在我更改python脚本时支持增量构建,我声明了plot.pdf
对my_script.py
的依赖性。但是my_script.py
也取决于我编写的其他python脚本。如果我更改这些脚本,例如utils.py
,我的文件plot.pdf
将不会更新。 是否可以从python中获取导入的python脚本的文件路径,以便将其添加到自动生成的Makefile中?还是可以推荐一种替代方法?
答案 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)