Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # bootstrap.py
- import sys
- import importlib.util
- import importlib.machinery
- packages = []
- sep = "_SEP_"
- class CythonPackageExtensionFileLoader(importlib.machinery.ExtensionFileLoader):
- def create_module(self, spec):
- module = super().create_module(spec)
- package = spec.name.replace(sep, ".")
- if package not in packages:
- package = package[:len(package) - package[::-1].index(".") - 1]
- spec.name = spec.name.replace(sep, ".")
- module.__package__ = package
- module.__name__ = spec.name.replace(sep, ".")
- return module
- class CythonPackageMetaPathFinder(importlib.abc.MetaPathFinder):
- def __init__(self, name_filter):
- super(CythonPackageMetaPathFinder, self).__init__()
- self.name_filter = name_filter
- def find_spec(self, fullname, path, target=None):
- if fullname.startswith(self.name_filter + ".") or fullname.startswith(self.name_filter + "_SEP_"):
- loader = CythonPackageExtensionFileLoader(fullname.replace(".", sep), __file__)
- spec = importlib.machinery.ModuleSpec(fullname.replace(".", sep), loader, origin=__file__, is_package=fullname in packages)
- return spec
- elif fullname == self.name_filter:
- return load_extensions(self.name_filter).__spec__
- def load_extensions(basename):
- sys.meta_path.insert(0, CythonPackageMetaPathFinder(basename))
- loader = CythonPackageExtensionFileLoader(basename, __file__)
- spec = importlib.util.spec_from_loader(basename, loader, is_package=True)
- module = importlib.util.module_from_spec(spec)
- module.__package__ = basename
- loader.exec_module(module)
- sys.modules[basename] = module
- return module
- sys.meta_path.insert(0, CythonPackageMetaPathFinder("pyunity"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement