提交 d7103a60 authored 作者: James Bergstra's avatar James Bergstra

modified dlimport to temporarily pre-pend to (rather than replace) sys.path

上级 212c9ab7
...@@ -134,6 +134,8 @@ def dlimport(fullpath, suffix=None): ...@@ -134,6 +134,8 @@ def dlimport(fullpath, suffix=None):
:returns: the dynamically loaded module (from __import__) :returns: the dynamically loaded module (from __import__)
""" """
if not os.path.isabs(fullpath):
raise ValueError('`fullpath` must be an absolute path', fullpath)
if suffix is None: if suffix is None:
if fullpath.endswith('.so'): if fullpath.endswith('.so'):
suffix = '.so' suffix = '.so'
...@@ -151,17 +153,17 @@ def dlimport(fullpath, suffix=None): ...@@ -151,17 +153,17 @@ def dlimport(fullpath, suffix=None):
else: else:
raise ValueError('path has wrong suffix', (fullpath, suffix)) raise ValueError('path has wrong suffix', (fullpath, suffix))
workdir = fullpath[:-len(module_name)- 1 - len(suffix)] workdir = fullpath[:-len(module_name)- 1 - len(suffix)]
#debug("WORKDIR", workdir)
#debug("module_name", module_name)
pathcopy = list(sys.path) debug("WORKDIR", workdir)
sys.path = [workdir] debug("module_name", module_name)
sys.path[0:0] = [workdir] #insert workdir at beginning (temporarily)
try: try:
rval = __import__(module_name, {}, {}, [module_name]) rval = __import__(module_name, {}, {}, [module_name])
if not rval: if not rval:
error('__import__ failed', fullpath) raise Exception('__import__ failed', fullpath)
finally: finally:
sys.path = pathcopy del sys.path[0]
assert fullpath.startswith(rval.__file__) assert fullpath.startswith(rval.__file__)
return rval return rval
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论