From 7d7012b21a1434ab03cead57e4b8926c8b5ef153 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Wed, 18 May 2016 19:58:51 -0700 Subject: fix for module loading to us importlib instead of imp (which no longer works in pyton3) --- src/engine/SCons/Tool/__init__.py | 68 +++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/src/engine/SCons/Tool/__init__.py b/src/engine/SCons/Tool/__init__.py index 4cd242b..87ebb98 100644 --- a/src/engine/SCons/Tool/__init__.py +++ b/src/engine/SCons/Tool/__init__.py @@ -38,11 +38,13 @@ tool definition. __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import imp +import importlib import sys import re import os import shutil + import SCons.Builder import SCons.Errors import SCons.Node.FS @@ -114,30 +116,56 @@ class Tool(object): sys.path = self.toolpath + sys.path try: + # Try site_tools first + return importlib.import_module(self.name) + except ImportError as e: + # Then try modules in main distribution + return importlib.import_module('SCons.Tool.'+self.name) + except ImportError as e: + if str(e) != "No module named %s" % self.name: + raise SCons.Errors.EnvironmentError(e) try: - file, path, desc = imp.find_module(self.name, self.toolpath) - try: - return imp.load_module(self.name, file, path, desc) - finally: - if file: - file.close() - except ImportError as e: - if str(e)!="No module named %s"%self.name: - raise SCons.Errors.EnvironmentError(e) - try: - import zipimport - except ImportError: - pass - else: - for aPath in self.toolpath: - try: - importer = zipimport.zipimporter(aPath) - return importer.load_module(self.name) - except ImportError as e: - pass + import zipimport + except ImportError: + pass + else: + for aPath in self.toolpath: + try: + importer = zipimport.zipimporter(aPath) + return importer.load_module(self.name) + except ImportError as e: + pass + finally: sys.path = oldpythonpath + # old code + # try: + # try: + # file, path, desc = imp.find_module(self.name, self.toolpath) + # try: + # return imp.load_module(self.name, file, path, desc) + # + # finally: + # if file: + # file.close() + # except ImportError as e: + # if str(e)!="No module named %s"%self.name: + # raise SCons.Errors.EnvironmentError(e) + # try: + # import zipimport + # except ImportError: + # pass + # else: + # for aPath in self.toolpath: + # try: + # importer = zipimport.zipimporter(aPath) + # return importer.load_module(self.name) + # except ImportError as e: + # pass + # finally: + # sys.path = oldpythonpath + full_name = 'SCons.Tool.' + self.name try: return sys.modules[full_name] -- cgit v0.12