如何为Python代码编写Makefile依赖关系

8 投票
2 回答
2951 浏览
提问于 2025-04-11 19:57

我有一堆C语言文件,这些文件是由一些Python程序生成的,而这些程序又使用了一些共享的Python模块。我需要在我的构建系统中考虑到这些情况。

我可以很容易地列出哪些Python程序需要运行才能生成每个C文件。但我找不到一个好的办法来确定这些程序依赖于哪些其他Python文件。我需要这个信息,这样当其中一个共享的Python文件发生变化时,构建系统才能知道需要重新生成哪些文件。

有没有什么好的方法可以从一组Python源文件中生成类似于构建规则的依赖关系?

2 个回答

1

这些import语句基本上就是所有的依赖关系。关于import语句,有两种相关的写法:

import x, y, z
from x import a, b, c

你还需要了解PYTHONPATHsites的信息,这些信息会用来构建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

撰写回答