This should hopefully finally clean up the remaining __del__ related
problems with this module, even if an instance of a derived class is
kept alive longer than the urllib module itself...
diff --git a/Lib/urllib.py b/Lib/urllib.py
index 422cb9e..a818adf 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -27,7 +27,7 @@
 import sys
 
 
-__version__ = '1.8'
+__version__ = '1.9'
 
 MAXFTPCACHE = 10		# Trim the ftp cache beyond this size
 
@@ -81,7 +81,7 @@
 ftpcache = {}
 class URLopener:
 
-	__tempfiles = []
+	__tempfiles = None
 
 	# Constructor
 	def __init__(self, proxies=None):
@@ -91,6 +91,7 @@
 		server_version = "Python-urllib/%s" % __version__
 		self.addheaders = [('User-agent', server_version)]
 		self.__tempfiles = []
+		self.__unlink = os.unlink # See cleanup()
 		self.tempcache = None
 		# Undocumented feature: if you assign {} to tempcache,
 		# it is used to cache files retrieved with
@@ -110,15 +111,18 @@
 		self.cleanup()
 
 	def cleanup(self):
+		# This code sometimes runs when the rest of this module
+		# has already been deleted, so it can't use any globals
+		# or import anything.
 		if self.__tempfiles:
-			import os
 			for file in self.__tempfiles:
 				try:
-					os.unlink(file)
-				except os.error:
+					self.__unlink(file)
+				except:
 					pass
-		URLopener.__tempfiles = []
-		self.tempcache = None
+			del self.__tempfiles[:]
+		if self.tempcache:
+		    self.tempcache.clear()
 
 	# Add a header to be used by the HTTP interface only
 	# e.g. u.addheader('Accept', 'sound/basic')
@@ -429,11 +433,9 @@
 			return None, None
 
 	def echo_off(self):
-		import os
 		os.system("stty -echo")
 
 	def echo_on(self):
-		import os
 		print
 		os.system("stty echo")