Add helper function to get module name taking packages into account.
diff --git a/Lib/trace.py b/Lib/trace.py
index 6661627..0a063c7 100644
--- a/Lib/trace.py
+++ b/Lib/trace.py
@@ -157,10 +157,29 @@
 
 def modname(path):
     """Return a plausible module name for the patch."""
+
     base = os.path.basename(path)
     filename, ext = os.path.splitext(base)
     return filename
 
+def fullmodname(path):
+    """Return a plausible module name for the patch."""
+
+    # If the file 'path' is part of a package, then the filename isn't
+    # enough to uniquely identify it.  Try to do the right thing by
+    # looking in sys.path for the longest matching prefix.  We'll
+    # assume that the rest is the package name.
+
+    longest = ""
+    for dir in sys.path:
+        if path.startswith(dir) and path[len(dir)] == os.path.sep:
+            if len(dir) > len(longest):
+                longest = dir
+
+    base = path[len(longest) + 1:].replace("/", ".")
+    filename, ext = os.path.splitext(base)
+    return filename
+
 class CoverageResults:
     def __init__(self, counts=None, calledfuncs=None, infile=None,
                  outfile=None):
@@ -225,7 +244,7 @@
             # skip some "files" we don't care about...
             if filename == "<string>":
                 continue
-            modulename = modname(filename)
+            modulename = fullmodname(filename)
 
             if filename.endswith(".pyc") or filename.endswith(".pyo"):
                 filename = filename[:-1]
@@ -470,6 +489,8 @@
             code = frame.f_code
             filename = code.co_filename
             if filename:
+                # XXX modname() doesn't work right for packages, so
+                # the ignore support won't work right for packages
                 modulename = modname(filename)
                 if modulename is not None:
                     ignore_it = self.ignore.names(filename, modulename)