--- checker.py 2016-12-08 14:47:29.734418995 -0800 +++ checker.new 2016-12-08 14:47:19.978419001 -0800 @@ -593,7 +593,7 @@ # Look for imported names that aren't used. for value in scope.values(): if isinstance(value, Importation): - used = value.used or value.name in all_names + used = value.used or value.name in all_names or scope.importStarred if not used: messg = messages.UnusedImport self.report(messg, value.source, str(value)) @@ -1271,9 +1271,19 @@ self.report(messages.ImportStarNotPermitted, node, module) continue - + for p in sys.path: + if os.path.exists(os.path.join(p, module)): + __all__ = {} + exec('from %s import *' % module, {}, __all__) + for n in sorted(__all__): + self.addBinding( + node, + ImportationFrom(n, node, module, n), + ) + break + else: + self.report(messages.ImportStarUsed, node, module) self.scope.importStarred = True - self.report(messages.ImportStarUsed, node, module) importation = StarImportation(module, node) else: importation = ImportationFrom(name, node,