Search through the module search path.
Add a warning to the top that this is the case.
diff --git a/Lib/linecache.py b/Lib/linecache.py
index 4355f19..b981869 100644
--- a/Lib/linecache.py
+++ b/Lib/linecache.py
@@ -1,5 +1,9 @@
 # Cache lines from files.
+# This is intended to read lines from modules imported -- hence if a filename
+# is not found, it will look down the module search path for a file by
+# that name.
 
+import sys
 import os
 from stat import *
 
@@ -34,12 +38,13 @@
 
 
 # Discard cache entries that are out of date.
-# (This is not checked upon each call
+# (This is not checked upon each call!)
 
 def checkcache():
 	for filename in cache.keys():
-		size, mtime, lines = cache[filename]
-		try:	stat = os.stat(filename)
+		size, mtime, lines, fullname = cache[filename]
+		try:
+			stat = os.stat(fullname)
 		except os.error:
 			del cache[filename]
 			continue
@@ -52,20 +57,34 @@
 # and return an empty list.
 
 def updatecache(filename):
-	try:	del cache[filename]
-	except KeyError: pass
-	try:	stat = os.stat(filename)
-	except os.error, msg:
-		if filename[0] + filename[-1] <> '<>':
-			print '*** Cannot stat', filename, ':', msg
+	if cache.has_key(filename):
+		del cache[filename]
+	if filename[0] + filename[-1] == '<>':
 		return []
+	fullname = filename
 	try:
-		fp = open(filename, 'r')
+		stat = os.stat(fullname)
+	except os.error, msg:
+		# Try looking through the module search path
+		basename = os.path.split(filename)[1]
+		for dirname in sys.path:
+			fullname = os.path.join(dirname, basename)
+			try:
+				stat = os.stat(fullname)
+				break
+			except os.error:
+				pass
+		else:
+			# No luck
+			print '*** Cannot stat', filename, ':', msg
+			return []
+	try:
+		fp = open(fullname, 'r')
 		lines = fp.readlines()
 		fp.close()
 	except IOError, msg:
-		print '*** Cannot open', filename, ':', msg
+		print '*** Cannot open', fullname, ':', msg
 		return []
 	size, mtime = stat[ST_SIZE], stat[ST_MTIME]
-	cache[filename] = size, mtime, lines
+	cache[filename] = size, mtime, lines, fullname
 	return lines