普通文本  |  45行  |  1.12 KB

#!/usr/bin/env python
"""
This script looks for ImportModules calls in C extensions
of the stdlib.

The current version has harcoded the location of the source
tries on Ronald's machine, a future version will be able
to rebuild the modulegraph source file that contains
this information.
"""

import re
import sys
import os
import pprint

import_re = re.compile('PyImport_ImportModule\w+\("(\w+)"\);')

def extract_implies(root):
    modules_dir = os.path.join(root, "Modules")
    for fn in os.listdir(modules_dir):
        if not fn.endswith('.c'):
            continue

        module_name = fn[:-2]
        if module_name.endswith('module'):
            module_name = module_name[:-6]

        with open(os.path.join(modules_dir, fn)) as fp:
            data = fp.read()

        imports = list(sorted(set(import_re.findall(data))))
        if imports:
            yield module_name, imports



def main():
    for version in ('2.6', '2.7', '3.1'):
        print "====", version
        pprint.pprint(list(extract_implies('/Users/ronald/Projects/python/release%s-maint'%(version.replace('.', '')))))

if __name__ == "__main__":
    main()