summaryrefslogtreecommitdiff
path: root/dotbot/util/module.py
diff options
context:
space:
mode:
Diffstat (limited to 'dotbot/util/module.py')
-rw-r--r--dotbot/util/module.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/dotbot/util/module.py b/dotbot/util/module.py
new file mode 100644
index 0000000..af6b0ed
--- /dev/null
+++ b/dotbot/util/module.py
@@ -0,0 +1,29 @@
+import sys, os.path
+
+# We keep references to loaded modules so they don't get garbage collected.
+loaded_modules = []
+
+def load(path):
+ basename = os.path.basename(path)
+ module_name, extension = os.path.splitext(basename)
+ plugin = load_module(module_name, path)
+ loaded_modules.append(plugin)
+
+if sys.version_info >= (3, 5):
+ import importlib.util
+
+ def load_module(module_name, path):
+ spec = importlib.util.spec_from_file_location(module_name, path)
+ module = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(module)
+ return module
+elif sys.version_info >= (3, 3):
+ from importlib.machinery import SourceFileLoader
+
+ def load_module(module_name, path):
+ return SourceFileLoader(module_name, path).load_module()
+else:
+ import imp
+
+ def load_module(module_name, path):
+ return imp.load_source(module_name, path)