py-sync-comm-libs/env/Lib/site-packages/PyInstaller/lib/modulegraph/__main__.py

90 lines
2.6 KiB
Python
Raw Normal View History

2024-04-25 09:12:48 +08:00
import sys
import os
import argparse
from .modulegraph import ModuleGraph
def parse_arguments():
parser = argparse.ArgumentParser(
conflict_handler='resolve', prog='%s -mmodulegraph' % (
os.path.basename(sys.executable)))
parser.add_argument(
'-d', action='count', dest='debug', default=1,
help='Increase debug level')
parser.add_argument(
'-q', action='store_const', dest='debug', const=0,
help='Clear debug level')
parser.add_argument(
'-m', '--modules', action='store_true',
dest='domods', default=False,
help='arguments are module names, not script files')
parser.add_argument(
'-x', metavar='NAME', action='append', dest='excludes',
default=[], help='Add NAME to the excludes list')
parser.add_argument(
'-p', action='append', metavar='PATH', dest='addpath', default=[],
help='Add PATH to the module search path')
parser.add_argument(
'-g', '--dot', action='store_const', dest='output', const='dot',
help='Output a .dot graph')
parser.add_argument(
'-h', '--html', action='store_const',
dest='output', const='html', help='Output a HTML file')
parser.add_argument(
'scripts', metavar='SCRIPT', nargs='+', help='scripts to analyse')
opts = parser.parse_args()
return opts
def create_graph(scripts, domods, debuglevel, excludes, path_extras):
# Set the path based on sys.path and the script directory
path = sys.path[:]
if domods:
del path[0]
else:
path[0] = os.path.dirname(scripts[0])
path = path_extras + path
if debuglevel > 1:
print("path:", file=sys.stderr)
for item in path:
print(" ", repr(item), file=sys.stderr)
# Create the module finder and turn its crank
mf = ModuleGraph(path, excludes=excludes, debug=debuglevel)
for arg in scripts:
if domods:
if arg[-2:] == '.*':
mf.import_hook(arg[:-2], None, ["*"])
else:
mf.import_hook(arg)
else:
mf.add_script(arg)
return mf
def output_graph(output_format, mf):
if output_format == 'dot':
mf.graphreport()
elif output_format == 'html':
mf.create_xref()
else:
mf.report()
def main():
opts = parse_arguments()
mf = create_graph(
opts.scripts, opts.domods, opts.debug,
opts.excludes, opts.addpath)
output_graph(opts.output, mf)
if __name__ == '__main__': # pragma: no cover
try:
main()
except KeyboardInterrupt:
print("\n[interrupt]")