如何为Python代码编写Makefile依赖关系
我有一堆C语言文件,这些文件是由一些Python程序生成的,而这些程序又使用了一些共享的Python模块。我需要在我的构建系统中考虑到这些情况。
我可以很容易地列出哪些Python程序需要运行才能生成每个C文件。但我找不到一个好的办法来确定这些程序依赖于哪些其他Python文件。我需要这个信息,这样当其中一个共享的Python文件发生变化时,构建系统才能知道需要重新生成哪些文件。
有没有什么好的方法可以从一组Python源文件中生成类似于构建规则的依赖关系?
2 个回答
1
这些import
语句基本上就是所有的依赖关系。关于import
语句,有两种相关的写法:
import x, y, z
from x import a, b, c
你还需要了解PYTHONPATH
和sites
的信息,这些信息会用来构建sys.path
。这显示了模块和包的实际位置。
处理这些信息有点麻烦,因为你需要把所有你引入的模块中的导入关系都理清楚。
作为一种替代方法,你可以使用-v
选项来获取完整的导入列表和实际文件。这会生成一个日志,你可以把它编辑成一个简单的依赖列表。
例如,当我执行
>>> import math
时,我在日志中看到这些内容
dlopen("/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/math.so", 2);
import math # dynamically loaded from /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/math.so
3
modulefinder 可以用来 获取依赖关系图。