2008-10-24 6 views
7

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

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

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

ответ

3

modulefinder может быть использован для get the dependency graph.

+0

Обратите внимание, что некоторые модули (например, PIL) делают фанковые вещи с динамическим импортом, поэтому модуль-модуль иногда нуждается в некоторой помощи для поиска всего. – 2008-10-24 05:33:46

1

Операторы 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 
Смежные вопросы