diff --git a/Lib/doctest.py b/Lib/doctest.py
index 8a5a22c..3f2baa5 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -820,7 +820,15 @@
         # given object's docstring.
         try:
             file = inspect.getsourcefile(obj) or inspect.getfile(obj)
-            source_lines = linecache.getlines(file)
+            if module is not None:
+                # Supply the module globals in case the module was
+                # originally loaded via a PEP 302 loader and
+                # file is not a valid filesystem path
+                source_lines = linecache.getlines(file, module.__dict__)
+            else:
+                # No access to a loader, so assume it's a normal
+                # filesystem path
+                source_lines = linecache.getlines(file)
             if not source_lines:
                 source_lines = None
         except TypeError:
@@ -1433,8 +1441,10 @@
         d = self._name2ft
         for name, (f, t) in other._name2ft.items():
             if name in d:
-                print "*** DocTestRunner.merge: '" + name + "' in both" \
-                    " testers; summing outcomes."
+                # Don't print here by default, since doing
+                #     so breaks some of the buildbots
+                #print "*** DocTestRunner.merge: '" + name + "' in both" \
+                #    " testers; summing outcomes."
                 f2, t2 = d[name]
                 f = f + f2
                 t = t + t2
diff --git a/Lib/test/test_zipimport_support.py b/Lib/test/test_zipimport_support.py
index 3daf90f..b416b81 100644
--- a/Lib/test/test_zipimport_support.py
+++ b/Lib/test/test_zipimport_support.py
@@ -173,6 +173,35 @@
             for obj in known_good_tests:
                 _run_object_doctest(obj, test_zipped_doctest)
 
+    def test_doctest_main_issue4197(self):
+        test_src = textwrap.dedent("""\
+                    class Test:
+                        ">>> 'line 2'"
+                        pass
+
+                    import doctest
+                    doctest.testmod()
+                    """)
+        pattern = 'File "%s", line 2, in %s'
+        with temp_dir() as d:
+            script_name = _make_test_script(d, 'script', test_src)
+            exit_code, data = _run_python(script_name)
+            expected = pattern % (script_name, "__main__.Test")
+            if verbose:
+                print "Expected line", expected
+                print "Got stdout:"
+                print data
+            self.assert_(expected in data)
+            zip_name, run_name = _make_test_zip(d, "test_zip",
+                                                script_name, '__main__.py')
+            exit_code, data = _run_python(zip_name)
+            expected = pattern % (run_name, "__main__.Test")
+            if verbose:
+                print "Expected line", expected
+                print "Got stdout:"
+                print data
+            self.assert_(expected in data)
+
     def test_pdb_issue4201(self):
         test_src = textwrap.dedent("""\
                     def f():
