Source code for jivago.tools.generate_static_imports

import argparse
import pkgutil
from typing import List


[docs] def generate_static_imports(root_app_module: str, outputfile: str): """Create a .py file containing all usually automatically imported packages as import my.app.package statements. Suitable for bundling the JivagoApplication using PyInstaller. :param root_app_module: Fully qualified import name for the app root. :param outputfile: The output .py file.""" packages = __import_package_recursive(__import__(root_app_module, fromlist="dummy-str1")) with open(outputfile, 'w') as f: f.writelines([f"import {x}\n" for x in packages])
def __import_package_recursive(package) -> List[str]: prefix = package.__name__ + "." packages = [] for importer, modname, ispkg in pkgutil.iter_modules(package.__path__, prefix): packages.append(modname) module = __import__(modname, fromlist="dummy-str1") if ispkg: packages.extend(__import_package_recursive(module)) return packages if __name__ == '__main__': parser = argparse.ArgumentParser( description="""Create a .py file containing all usually automatically imported packages as import my.app.package statements. Suitable for bundling the JivagoApplication using PyInstaller.""") parser.add_argument("--root-app-module", type=str, help="Fully qualified import name for the app root.", dest="root", required=True) parser.add_argument("--outputfile", type=str, help="The output .py file.", dest="output", required=True) args = parser.parse_args() generate_static_imports(args.root, args.output)