Advertisement
Guest User

bootstrap.py

a guest
Sep 2nd, 2021
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.78 KB | None | 0 0
  1. # bootstrap.py
  2. import sys
  3. import importlib.util
  4. import importlib.machinery
  5.  
  6. packages = []
  7. sep = "_SEP_"
  8.  
  9. class CythonPackageExtensionFileLoader(importlib.machinery.ExtensionFileLoader):
  10.     def create_module(self, spec):
  11.         module = super().create_module(spec)
  12.         package = spec.name.replace(sep, ".")
  13.         if package not in packages:
  14.             package = package[:len(package) - package[::-1].index(".") - 1]
  15.         spec.name = spec.name.replace(sep, ".")
  16.         module.__package__ = package
  17.         module.__name__ = spec.name.replace(sep, ".")
  18.         return module
  19.  
  20. class CythonPackageMetaPathFinder(importlib.abc.MetaPathFinder):
  21.     def __init__(self, name_filter):
  22.         super(CythonPackageMetaPathFinder, self).__init__()
  23.         self.name_filter = name_filter
  24.  
  25.     def find_spec(self, fullname, path, target=None):
  26.         if fullname.startswith(self.name_filter + ".") or fullname.startswith(self.name_filter + "_SEP_"):
  27.             loader = CythonPackageExtensionFileLoader(fullname.replace(".", sep), __file__)
  28.             spec = importlib.machinery.ModuleSpec(fullname.replace(".", sep), loader, origin=__file__, is_package=fullname in packages)
  29.             return spec
  30.         elif fullname == self.name_filter:
  31.             return load_extensions(self.name_filter).__spec__
  32.  
  33. def load_extensions(basename):
  34.     sys.meta_path.insert(0, CythonPackageMetaPathFinder(basename))
  35.     loader = CythonPackageExtensionFileLoader(basename, __file__)
  36.     spec = importlib.util.spec_from_loader(basename, loader, is_package=True)
  37.     module = importlib.util.module_from_spec(spec)
  38.     module.__package__ = basename
  39.     loader.exec_module(module)
  40.     sys.modules[basename] = module
  41.     return module
  42.  
  43. sys.meta_path.insert(0, CythonPackageMetaPathFinder("pyunity"))
  44.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement