contrib/import-checker.py
changeset 20198 f5393a9dc4e5
parent 20197 761f2929a6ad
child 20200 532fa12033e1
--- a/contrib/import-checker.py	Sun Dec 22 14:10:26 2013 -0800
+++ b/contrib/import-checker.py	Sun Dec 22 21:20:38 2013 -0800
@@ -2,6 +2,12 @@
 import os
 import sys
 
+# Import a minimal set of stdlib modules needed for list_stdlib_modules()
+# to work when run from a virtualenv.  The modules were chosen empirically
+# so that the return value matches the return value without virtualenv.
+import BaseHTTPServer
+import zlib
+
 def dotted_name_of_path(path):
     """Given a relative path to a source file, return its dotted module name.
 
@@ -49,6 +55,21 @@
         yield m
     yield 'builtins' # python3 only
     stdlib_prefixes = set([sys.prefix, sys.exec_prefix])
+    # We need to supplement the list of prefixes for the search to work
+    # when run from within a virtualenv.
+    for mod in (BaseHTTPServer, zlib):
+        try:
+            # Not all module objects have a __file__ attribute.
+            filename = mod.__file__
+        except AttributeError:
+            continue
+        dirname = os.path.dirname(filename)
+        for prefix in stdlib_prefixes:
+            if dirname.startswith(prefix):
+                # Then this directory is redundant.
+                break
+        else:
+            stdlib_prefixes.add(dirname)
     for libpath in sys.path:
         # We want to walk everything in sys.path that starts with something
         # in stdlib_prefixes.