diff --git a/eliot/_util.py b/eliot/_util.py
index <HASH>..<HASH> 100644
--- a/eliot/_util.py
+++ b/eliot/_util.py
@@ -6,7 +6,7 @@ from __future__ import unicode_literals
 
 from types import ModuleType
 
-from six import exec_, text_type as unicode
+from six import exec_, text_type as unicode, PY3
 
 
 def safeunicode(o):
@@ -52,9 +52,15 @@ def load_module(name, original_module):
     @return: A new, distinct module.
     """
     module = ModuleType(name)
-    path = original_module.__file__
-    if path.endswith(".pyc") or path.endswith(".pyo"):
-        path = path[:-1]
-    with open(path) as f:
-        exec_(f.read(), module.__dict__, module.__dict__)
+    if PY3:
+        import importlib.util
+        spec = importlib.util.find_spec(original_module.__name__)
+        source = spec.loader.get_code(original_module.__name__)
+    else:
+        path = original_module.__file__
+        if path.endswith(".pyc") or path.endswith(".pyo"):
+            path = path[:-1]
+        with open(path) as f:
+            source = f.read()
+    exec_(source, module.__dict__, module.__dict__)
     return module
Support PyInstaller on Python 3.