Я пишу программу, которая классифицирует список файлов Python, с помощью которых модули импортируются. Поэтому мне нужно отсканировать коллекцию .py файлов, чтобы вернуть список модулей, которые они импортируют. Например, если один из импортируемых файлов имеет следующие строки:
import os
import sys, gtk
Я бы хотел, чтобы он вернулся:
["os", "sys", "gtk"]
Я играл с modulefinder и писал:
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script('testscript.py')
print 'Loaded modules:'
for name, mod in finder.modules.iteritems():
print '%s ' % name,
но это возвращает больше, чем только модули, используемые в script. В качестве примера в script, который просто имеет:
import os
print os.getenv('USERNAME')
Модули, возвращенные из модуля ModuleFinder script return:
tokenize heapq __future__ copy_reg sre_compile _collections cStringIO _sre functools random cPickle __builtin__ subprocess cmd gc __main__ operator array select _heapq _threading_local abc _bisect posixpath _random os2emxpath tempfile errno pprint binascii token sre_constants re _abcoll collections ntpath threading opcode _struct _warnings math shlex fcntl genericpath stat string warnings UserDict inspect repr struct sys pwd imp getopt readline copy bdb types strop _functools keyword thread StringIO bisect pickle signal traceback difflib marshal linecache itertools dummy_thread posix doctest unittest time sre_parse os pdb dis
... тогда как я просто хочу, чтобы он возвращал "os", поскольку это был модуль, используемый в script.
Может ли кто-нибудь помочь мне достичь этого?
UPDATE. Я просто хочу уточнить, что я хотел бы сделать это, не анализируя файл Python и просто сканируя код.