Как сделать зависимости Makefile для кода Python - PullRequest
7 голосов
/ 24 октября 2008

У меня есть куча файлов C, сгенерированных набором программ на python, имеющих несколько общих модулей python, и мне нужно учитывать это в моей системе make.

Достаточно просто перечислить, какую программу Python необходимо запустить для генерации каждого C-файла. Что я не могу найти хорошее решение для определения других файлов Python, от которых зависят эти программы. Мне это нужно, так что make будет знать, что нужно восстановить, если один из общих файлов Python изменяется.

Есть ли хорошая система для создания правил зависимости make style из коллекции исходников Python?

Ответы [ 2 ]

3 голосов
/ 24 октября 2008

modulefinder может использоваться для получения графика зависимости .

1 голос
/ 24 октября 2008

Операторы 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
...