summaryrefslogtreecommitdiffstats
path: root/Lib/imp.py
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2012-04-16 02:28:28 (GMT)
committerBrett Cannon <brett@python.org>2012-04-16 02:28:28 (GMT)
commit2ee61422ed2d9069e11ce685823bd247b5a2e4e6 (patch)
tree3d4e1c9ad7964673fddfc9fd23ecbed42de1bdfe /Lib/imp.py
parent01a76171a0fd890fabcdfe8963d26d218caf08d1 (diff)
downloadcpython-2ee61422ed2d9069e11ce685823bd247b5a2e4e6.zip
cpython-2ee61422ed2d9069e11ce685823bd247b5a2e4e6.tar.gz
cpython-2ee61422ed2d9069e11ce685823bd247b5a2e4e6.tar.bz2
Issue #13959: Re-implement imp.load_package() in imp.py.
Thanks to Eric Snow for helping with imp.load_module() (previous commit) which led to the removal of a bunch of C code.
Diffstat (limited to 'Lib/imp.py')
-rw-r--r--Lib/imp.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/Lib/imp.py b/Lib/imp.py
index 1d7742d..62623b6 100644
--- a/Lib/imp.py
+++ b/Lib/imp.py
@@ -14,14 +14,29 @@ from _imp import (lock_held, acquire_lock, release_lock, reload,
from _imp import (get_magic, get_tag, get_suffixes, cache_from_source,
source_from_cache)
# Should be re-implemented here (and mostly deprecated)
-from _imp import (find_module, load_compiled,
- load_package, load_source, NullImporter,
+from _imp import (find_module, load_compiled, load_source, NullImporter,
SEARCH_ERROR, PY_SOURCE, PY_COMPILED, C_EXTENSION,
PY_RESOURCE, PKG_DIRECTORY, C_BUILTIN, PY_FROZEN,
PY_CODERESOURCE, IMP_HOOK)
from importlib._bootstrap import _new_module as new_module
+from importlib import _bootstrap
+import os
+
+
+def load_package(name, path):
+ if os.path.isdir(path):
+ extensions = _bootstrap._suffix_list(PY_SOURCE)
+ extensions += _bootstrap._suffix_list(PY_COMPILED)
+ for extension in extensions:
+ path = os.path.join(path, '__init__'+extension)
+ if os.path.exists(path):
+ break
+ else:
+ raise ValueError('{!r} is not a package'.format(path))
+ return _bootstrap._SourceFileLoader(name, path).load_module(name)
+
def load_module(name, file, filename, details):
"""Load a module, given information returned by find_module().