diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index 034828b..c7ebce8 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -336,16 +336,16 @@
         options, args = getopt.getopt(args, '?hb',
                 [ 'build-dir=', 'third-party=', 'sdk-path=' , 'src-dir='])
     except getopt.error as msg:
-        print msg
+        print(msg)
         sys.exit(1)
 
     if args:
-        print "Additional arguments"
+        print("Additional arguments")
         sys.exit(1)
 
     for k, v in options:
         if k in ('-h', '-?'):
-            print USAGE
+            print(USAGE)
             sys.exit(0)
 
         elif k in ('-d', '--build-dir'):
@@ -368,12 +368,12 @@
     SDKPATH=os.path.abspath(SDKPATH)
     DEPSRC=os.path.abspath(DEPSRC)
 
-    print "Settings:"
-    print " * Source directory:", SRCDIR
-    print " * Build directory: ", WORKDIR
-    print " * SDK location:    ", SDKPATH
-    print " * third-party source:", DEPSRC
-    print ""
+    print("Settings:")
+    print(" * Source directory:", SRCDIR)
+    print(" * Build directory: ", WORKDIR)
+    print(" * SDK location:    ", SDKPATH)
+    print(" * third-party source:", DEPSRC)
+    print("")
 
 
 
@@ -440,7 +440,7 @@
         pass
     else:
         if KNOWNSIZES.get(url) == size:
-            print "Using existing file for", url
+            print("Using existing file for", url)
             return
     fpIn = urllib2.urlopen(url)
     fpOut = open(fname, 'wb')
@@ -479,14 +479,14 @@
 
 
     if os.path.exists(sourceArchive):
-        print "Using local copy of %s"%(name,)
+        print("Using local copy of %s"%(name,))
 
     else:
-        print "Downloading %s"%(name,)
+        print("Downloading %s"%(name,))
         downloadURL(url, sourceArchive)
-        print "Archive for %s stored as %s"%(name, sourceArchive)
+        print("Archive for %s stored as %s"%(name, sourceArchive))
 
-    print "Extracting archive for %s"%(name,)
+    print("Extracting archive for %s"%(name,))
     buildDir=os.path.join(WORKDIR, '_bld')
     if not os.path.exists(buildDir):
         os.mkdir(buildDir)
@@ -549,14 +549,14 @@
         configure_args.insert(0, configure)
         configure_args = [ shellQuote(a) for a in configure_args ]
 
-        print "Running configure for %s"%(name,)
+        print("Running configure for %s"%(name,))
         runCommand(' '.join(configure_args) + ' 2>&1')
 
-    print "Running install for %s"%(name,)
+    print("Running install for %s"%(name,))
     runCommand('{ ' + install + ' ;} 2>&1')
 
-    print "Done %s"%(name,)
-    print ""
+    print("Done %s"%(name,))
+    print("")
 
     os.chdir(curdir)
 
@@ -564,9 +564,9 @@
     """
     Build our dependencies into $WORKDIR/libraries/usr/local
     """
-    print ""
-    print "Building required libraries"
-    print ""
+    print("")
+    print("Building required libraries")
+    print("")
     universal = os.path.join(WORKDIR, 'libraries')
     os.mkdir(universal)
     os.makedirs(os.path.join(universal, 'usr', 'local', 'lib'))
@@ -580,7 +580,7 @@
 def buildPythonDocs():
     # This stores the documentation as Resources/English.lproj/Docuentation
     # inside the framwork. pydoc and IDLE will pick it up there.
-    print "Install python documentation"
+    print("Install python documentation")
     rootDir = os.path.join(WORKDIR, '_root')
     version = getVersion()
     docdir = os.path.join(rootDir, 'pydocs')
@@ -588,13 +588,13 @@
     name = 'html-%s.tar.bz2'%(getFullVersion(),)
     sourceArchive = os.path.join(DEPSRC, name)
     if os.path.exists(sourceArchive):
-        print "Using local copy of %s"%(name,)
+        print("Using local copy of %s"%(name,))
 
     else:
-        print "Downloading %s"%(name,)
+        print("Downloading %s"%(name,))
         downloadURL('http://www.python.org/ftp/python/doc/%s/%s'%(
             getFullVersion(), name), sourceArchive)
-        print "Archive for %s stored as %s"%(name, sourceArchive)
+        print("Archive for %s stored as %s"%(name, sourceArchive))
 
     extractArchive(os.path.dirname(docdir), sourceArchive)
     os.rename(
@@ -604,7 +604,7 @@
 
 
 def buildPython():
-    print "Building a universal python"
+    print("Building a universal python")
 
     buildDir = os.path.join(WORKDIR, '_bld', 'python')
     rootDir = os.path.join(WORKDIR, '_root')
@@ -627,24 +627,24 @@
     # several paths.
     version = getVersion()
 
-    print "Running configure..."
+    print("Running configure...")
     runCommand("%s -C --enable-framework --enable-universalsdk=%s LDFLAGS='-g -L%s/libraries/usr/local/lib' OPT='-g -O3 -I%s/libraries/usr/local/include' 2>&1"%(
         shellQuote(os.path.join(SRCDIR, 'configure')),
         shellQuote(SDKPATH), shellQuote(WORKDIR)[1:-1],
         shellQuote(WORKDIR)[1:-1]))
 
-    print "Running make"
+    print("Running make")
     runCommand("make")
 
-    print "Running make frameworkinstall"
+    print("Running make frameworkinstall")
     runCommand("make frameworkinstall DESTDIR=%s"%(
         shellQuote(rootDir)))
 
-    print "Running make frameworkinstallextras"
+    print("Running make frameworkinstallextras")
     runCommand("make frameworkinstallextras DESTDIR=%s"%(
         shellQuote(rootDir)))
 
-    print "Copying required shared libraries"
+    print("Copying required shared libraries")
     if os.path.exists(os.path.join(WORKDIR, 'libraries', 'Library')):
         runCommand("mv %s/* %s"%(
             shellQuote(os.path.join(
@@ -655,7 +655,7 @@
                 'Python.framework', 'Versions', getVersion(),
                 'lib'))))
 
-    print "Fix file modes"
+    print("Fix file modes")
     frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework')
     gid = grp.getgrnam('admin').gr_gid
 
@@ -744,7 +744,7 @@
         readme = textwrap.dedent(recipe['readme'])
         isRequired = recipe.get('required', True)
 
-        print "- building package %s"%(pkgname,)
+        print("- building package %s"%(pkgname,))
 
         # Substitute some variables
         textvars = dict(
@@ -1047,9 +1047,9 @@
     shutil.copy('../../LICENSE', os.path.join(WORKDIR, 'installer', 'License.txt'))
 
     fp = open(os.path.join(WORKDIR, 'installer', 'Build.txt'), 'w')
-    print >> fp, "# BUILD INFO"
-    print >> fp, "# Date:", time.ctime()
-    print >> fp, "# By:", pwd.getpwuid(os.getuid()).pw_gecos
+    print("# BUILD INFO", file=fp)
+    print("# Date:", time.ctime(), file=fp)
+    print("# By:", pwd.getpwuid(os.getuid()).pw_gecos, file=fp)
     fp.close()
 
     # Custom icon for the DMG, shown when the DMG is mounted.
diff --git a/Mac/Demo/PICTbrowse/PICTbrowse.py b/Mac/Demo/PICTbrowse/PICTbrowse.py
index 0adfc83..83f431e 100644
--- a/Mac/Demo/PICTbrowse/PICTbrowse.py
+++ b/Mac/Demo/PICTbrowse/PICTbrowse.py
@@ -69,9 +69,9 @@
         self.resid = resid
         picture = Qd.GetPicture(self.resid)
         # Get rect for picture
-        print repr(picture.data[:16])
+        print(repr(picture.data[:16]))
         sz, t, l, b, r = struct.unpack('hhhhh', picture.data[:10])
-        print 'pict:', t, l, b, r
+        print('pict:', t, l, b, r)
         width = r-l
         height = b-t
         if width < 64: width = 64
@@ -79,7 +79,7 @@
         if height < 64: height = 64
         elif height > 320: height = 320
         bounds = (LEFT, TOP, LEFT+width, TOP+height)
-        print 'bounds:', bounds
+        print('bounds:', bounds)
 
         self.wid = Win.NewWindow(bounds, resname, 1, 0, -1, 1, 0)
         self.wid.SetWindowPic(picture)
diff --git a/Mac/Demo/PICTbrowse/oldPICTbrowse.py b/Mac/Demo/PICTbrowse/oldPICTbrowse.py
index 8600bb2..2c6f08b 100644
--- a/Mac/Demo/PICTbrowse/oldPICTbrowse.py
+++ b/Mac/Demo/PICTbrowse/oldPICTbrowse.py
@@ -68,9 +68,9 @@
         self.resid = resid
         picture = Qd.GetPicture(self.resid)
         # Get rect for picture
-        print repr(picture.data[:16])
+        print(repr(picture.data[:16]))
         sz, t, l, b, r = struct.unpack('hhhhh', picture.data[:10])
-        print 'pict:', t, l, b, r
+        print('pict:', t, l, b, r)
         width = r-l
         height = b-t
         if width < 64: width = 64
@@ -78,7 +78,7 @@
         if height < 64: height = 64
         elif height > 320: height = 320
         bounds = (LEFT, TOP, LEFT+width, TOP+height)
-        print 'bounds:', bounds
+        print('bounds:', bounds)
 
         self.wid = Win.NewWindow(bounds, resname, 1, 0, -1, 1, 0)
         self.wid.SetWindowPic(picture)
@@ -115,7 +115,7 @@
         (what, message, when, where, modifiers) = event
         Qd.SetPort(self.wid)
         where = Qd.GlobalToLocal(where)
-        print 'LISTHIT', where
+        print('LISTHIT', where)
         if self.list.LClick(where, modifiers):
             self.do_show()
 
diff --git a/Mac/Demo/applescript/makedisk.py b/Mac/Demo/applescript/makedisk.py
index 013331c..981a5ef 100644
--- a/Mac/Demo/applescript/makedisk.py
+++ b/Mac/Demo/applescript/makedisk.py
@@ -8,8 +8,8 @@
 try:
     objref = talker.create('my disk image', saving_as=filespec, leave_image_mounted=1)
 except Disk_Copy.Error as arg:
-    print "ERROR: my disk image:", arg
+    print("ERROR: my disk image:", arg)
 else:
-    print 'objref=', objref
-print 'Type return to exit-'
+    print('objref=', objref)
+print('Type return to exit-')
 sys.stdin.readline()
diff --git a/Mac/Demo/imgbrowse/imgbrowse.py b/Mac/Demo/imgbrowse/imgbrowse.py
index 57cddd3..fddfc99 100644
--- a/Mac/Demo/imgbrowse/imgbrowse.py
+++ b/Mac/Demo/imgbrowse/imgbrowse.py
@@ -25,7 +25,7 @@
 
 
 def main():
-    print 'hello world'
+    print('hello world')
     imgbrowse()
 
 class imgbrowse(FrameWork.Application):
@@ -84,10 +84,10 @@
     def do_update(self, *args):
         pass
         currect = self.fitrect()
-        print 'PICT:', self.pictrect
-        print 'WIND:', currect
-        print 'ARGS:', (self.pixmap, self.wid.GetWindowPort().GetPortBitMapForCopyBits(), self.pictrect,
-                        currect, QuickDraw.srcCopy, None)
+        print('PICT:', self.pictrect)
+        print('WIND:', currect)
+        print('ARGS:', (self.pixmap, self.wid.GetWindowPort().GetPortBitMapForCopyBits(), self.pictrect,
+                        currect, QuickDraw.srcCopy, None))
         self.info()
         Qd.CopyBits(self.pixmap, self.wid.GetWindowPort().GetPortBitMapForCopyBits(), self.pictrect,
                         currect, QuickDraw.srcCopy, None)
diff --git a/Mac/Demo/imgbrowse/mac_image.py b/Mac/Demo/imgbrowse/mac_image.py
index 9c9eeb7..75baff4 100644
--- a/Mac/Demo/imgbrowse/mac_image.py
+++ b/Mac/Demo/imgbrowse/mac_image.py
@@ -38,19 +38,19 @@
             cmpCount, cmpSize, \
             planeBytes, pmTable, pmReserved \
                     = struct.unpack("lhhhhhhhlllhhhhlll", data)
-    print 'Base:       0x%x'%baseAddr
-    print 'rowBytes:   %d (0x%x)'%(rowBytes&0x3fff, rowBytes)
-    print 'rect:       %d, %d, %d, %d'%(t, l, b, r)
-    print 'pmVersion:  0x%x'%pmVersion
-    print 'packing:    %d %d'%(packType, packSize)
-    print 'resolution: %f x %f'%(float(hRes)/0x10000, float(vRes)/0x10000)
-    print 'pixeltype:  %d, size %d'%(pixelType, pixelSize)
-    print 'components: %d, size %d'%(cmpCount, cmpSize)
-    print 'planeBytes: %d (0x%x)'%(planeBytes, planeBytes)
-    print 'pmTable:    0x%x'%pmTable
-    print 'pmReserved: 0x%x'%pmReserved
+    print('Base:       0x%x'%baseAddr)
+    print('rowBytes:   %d (0x%x)'%(rowBytes&0x3fff, rowBytes))
+    print('rect:       %d, %d, %d, %d'%(t, l, b, r))
+    print('pmVersion:  0x%x'%pmVersion)
+    print('packing:    %d %d'%(packType, packSize))
+    print('resolution: %f x %f'%(float(hRes)/0x10000, float(vRes)/0x10000))
+    print('pixeltype:  %d, size %d'%(pixelType, pixelSize))
+    print('components: %d, size %d'%(cmpCount, cmpSize))
+    print('planeBytes: %d (0x%x)'%(planeBytes, planeBytes))
+    print('pmTable:    0x%x'%pmTable)
+    print('pmReserved: 0x%x'%pmReserved)
     for i in range(0, len(data), 16):
         for j in range(16):
             if i + j < len(data):
-                print '%02.2x'%ord(data[i+j]),
-        print
+                print('%02.2x'%ord(data[i+j]), end=' ')
+        print()
diff --git a/Mac/Demo/quicktime/VerySimplePlayer.py b/Mac/Demo/quicktime/VerySimplePlayer.py
index 2930eac..7c0fef0 100644
--- a/Mac/Demo/quicktime/VerySimplePlayer.py
+++ b/Mac/Demo/quicktime/VerySimplePlayer.py
@@ -18,7 +18,7 @@
 # XXXX maxbounds = (40, 40, 1000, 1000)
 
 def main():
-    print 'hello world' # XXXX
+    print('hello world') # XXXX
     # skip the toolbox initializations, already done
     # XXXX Should use gestalt here to check for quicktime version
     Qt.EnterMovies()
@@ -75,7 +75,7 @@
             whichWindow = Win.WhichWindow(message)
             if not whichWindow:
                 # Probably the console window. Print something, hope it helps.
-                print 'update'
+                print('update')
             else:
                 Qd.SetPort(whichWindow)
                 whichWindow.BeginUpdate()
diff --git a/Mac/Demo/resources/copyres.py b/Mac/Demo/resources/copyres.py
index da55b06..6c8a3c0 100644
--- a/Mac/Demo/resources/copyres.py
+++ b/Mac/Demo/resources/copyres.py
@@ -34,7 +34,7 @@
             id, type, name = res.GetResInfo()
             size = res.SizeResource()
             attrs = res.GetResAttrs()
-            print id, type, name, size, hex(attrs)
+            print(id, type, name, size, hex(attrs))
             res.DetachResource()
             UseResFile(output)
             try:
@@ -42,15 +42,15 @@
             except (RuntimeError, Res.Error) as msg:
                 res2 = None
             if res2:
-                print "Duplicate type+id, not copied"
+                print("Duplicate type+id, not copied")
                 print (res2.size, res2.data)
-                print res2.GetResInfo()
+                print(res2.GetResInfo())
                 if res2.HomeResFile() == output:
                     'OK'
                 elif res2.HomeResFile() == input:
                     'BAD!'
                 else:
-                    print 'Home:', res2.HomeResFile()
+                    print('Home:', res2.HomeResFile())
             else:
                 res.AddResource(type, id, name)
                 #res.SetResAttrs(attrs)
diff --git a/Mac/Demo/resources/listres.py b/Mac/Demo/resources/listres.py
index 6ce5779..8f391eb 100644
--- a/Mac/Demo/resources/listres.py
+++ b/Mac/Demo/resources/listres.py
@@ -7,7 +7,7 @@
     ntypes = Res.Count1Types()
     for itype in range(1, 1+ntypes):
         type = Res.Get1IndType(itype)
-        print "Type:", repr(type)
+        print("Type:", repr(type))
         nresources = Res.Count1Resources(type)
         for i in range(1, 1 + nresources):
             Res.SetResLoad(0)
@@ -19,7 +19,7 @@
     ntypes = Res.CountTypes()
     for itype in range(1, 1+ntypes):
         type = Res.GetIndType(itype)
-        print "Type:", repr(type)
+        print("Type:", repr(type))
         nresources = Res.CountResources(type)
         for i in range(1, 1 + nresources):
             Res.SetResLoad(0)
@@ -28,7 +28,7 @@
             info(res)
 
 def info(res):
-    print res.GetResInfo(), res.SizeResource(), decodeattrs(res.GetResAttrs())
+    print(res.GetResInfo(), res.SizeResource(), decodeattrs(res.GetResAttrs()))
 
 attrnames = {
         resChanged:     'Changed',
@@ -51,9 +51,9 @@
     return names
 
 def test():
-    print "=== Local resourcess ==="
+    print("=== Local resourcess ===")
     list1resources()
-    print "=== All resources ==="
+    print("=== All resources ===")
     listresources()
 
 if __name__ == '__main__':
diff --git a/Mac/Demo/sound/playaiff.py b/Mac/Demo/sound/playaiff.py
index 8237895..087f7c9 100644
--- a/Mac/Demo/sound/playaiff.py
+++ b/Mac/Demo/sound/playaiff.py
@@ -5,16 +5,16 @@
 
 fn = 'f:just samples:2ndbeat.aif'
 af = aifc.open(fn, 'r')
-print af.getparams()
-print 'nframes  =', af.getnframes()
-print 'nchannels =', af.getnchannels()
-print 'framerate =', af.getframerate()
+print(af.getparams())
+print('nframes  =', af.getnframes())
+print('nchannels =', af.getnchannels())
+print('framerate =', af.getframerate())
 nframes = min(af.getnframes(), 100000)
 frames = af.readframes(nframes)
-print 'len(frames) =', len(frames)
-print repr(frames[:100])
+print('len(frames) =', len(frames))
+print(repr(frames[:100]))
 frames = audioop.add(frames, '\x80'*len(frames), 1)
-print repr(frames[:100])
+print(repr(frames[:100]))
 
 import struct
 
@@ -27,7 +27,7 @@
                       0xFF,
                       60,
                       nframes)
-print repr(header1)
+print(repr(header1))
 header2 = struct.pack('llhlll', 0, 0, 0, 0, 0, 0)
 header3 = struct.pack('hhlll',
                       af.getsampwidth()*8,
@@ -35,7 +35,7 @@
                       0,
                       0,
                       0)
-print repr(header3)
+print(repr(header3))
 header = header1 + header2 + header3
 
 buffer = header + frames
diff --git a/Mac/Demo/textedit/ped.py b/Mac/Demo/textedit/ped.py
index 8cd4713..f28ae3c 100644
--- a/Mac/Demo/textedit/ped.py
+++ b/Mac/Demo/textedit/ped.py
@@ -50,7 +50,7 @@
         height = self.ted.nLines * self.ted.lineHeight
         vx = self.scalebarvalue(dr[0], dr[2]-dr[0], vr[0], vr[2])
         vy = self.scalebarvalue(dr[1], dr[1]+height, vr[1], vr[3])
-        print dr, vr, height, vx, vy
+        print(dr, vr, height, vx, vy)
         return None, vy
 
     def scrollbar_callback(self, which, what, value):
@@ -72,12 +72,12 @@
                 if delta >= 0:
                     delta = -self.ted.lineHeight
             self.ted.TEPinScroll(0, delta)
-            print 'SCROLL Y', delta
+            print('SCROLL Y', delta)
         else:
             pass # No horizontal scrolling
 
     def do_activate(self, onoff, evt):
-        print "ACTIVATE", onoff
+        print("ACTIVATE", onoff)
         ScrolledWindow.do_activate(self, onoff, evt)
         if onoff:
             self.ted.TEActivate()
@@ -121,7 +121,7 @@
         if not self.path:
             self.menu_save_as()
             return # Will call us recursively
-        print 'Saving to ', self.path
+        print('Saving to ', self.path)
         dhandle = self.ted.TEGetText()
         data = dhandle.data
         fp = open(self.path, 'wb')  # NOTE: wb, because data has CR for end-of-line
diff --git a/Mac/Extras.install.py b/Mac/Extras.install.py
index ce00af3..ab1af71 100644
--- a/Mac/Extras.install.py
+++ b/Mac/Extras.install.py
@@ -25,23 +25,23 @@
         assert cursrc.startswith(src)
         curdst = dst + cursrc[len(src):]
         if verbose:
-            print "mkdir", curdst
+            print("mkdir", curdst)
         if not debug:
             if not os.path.exists(curdst):
                 os.makedirs(curdst)
         for fn in files:
             if isclean(fn):
                 if verbose:
-                    print "copy", os.path.join(cursrc, fn), os.path.join(curdst, fn)
+                    print("copy", os.path.join(cursrc, fn), os.path.join(curdst, fn))
                 if not debug:
                     shutil.copy2(os.path.join(cursrc, fn), os.path.join(curdst, fn))
             else:
                 if verbose:
-                    print "skipfile", os.path.join(cursrc, fn)
+                    print("skipfile", os.path.join(cursrc, fn))
         for i in range(len(dirs)-1, -1, -1):
             if not isclean(dirs[i]):
                 if verbose:
-                    print "skipdir", os.path.join(cursrc, dirs[i])
+                    print("skipdir", os.path.join(cursrc, dirs[i]))
                 del dirs[i]
 
 def main():
diff --git a/Mac/Modules/ae/aescan.py b/Mac/Modules/ae/aescan.py
index 0ea367c..c23d18f 100644
--- a/Mac/Modules/ae/aescan.py
+++ b/Mac/Modules/ae/aescan.py
@@ -13,18 +13,18 @@
 from scantools import Scanner
 
 def main():
-    print "=== Scanning AEDataModel.h, AppleEvents.h, AERegistry.h, AEObjects.h ==="
+    print("=== Scanning AEDataModel.h, AppleEvents.h, AERegistry.h, AEObjects.h ===")
     input = ["AEDataModel.h", "AEInteraction.h", "AppleEvents.h", "AERegistry.h", "AEObjects.h"]
     output = "aegen.py"
     defsoutput = TOOLBOXDIR + "AppleEvents.py"
     scanner = AppleEventsScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done Scanning and Generating, now doing 'import aesupport' ==="
+    print("=== Done Scanning and Generating, now doing 'import aesupport' ===")
     import aesupport
-    print "=== Done 'import aesupport'.  It's up to you to compile AEmodule.c ==="
+    print("=== Done 'import aesupport'.  It's up to you to compile AEmodule.c ===")
 
 class AppleEventsScanner(Scanner):
 
diff --git a/Mac/Modules/ah/ahscan.py b/Mac/Modules/ah/ahscan.py
index 8768b60..f52b771 100644
--- a/Mac/Modules/ah/ahscan.py
+++ b/Mac/Modules/ah/ahscan.py
@@ -17,11 +17,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner_OSX):
 
diff --git a/Mac/Modules/app/appscan.py b/Mac/Modules/app/appscan.py
index 246d61e..fa154ca 100644
--- a/Mac/Modules/app/appscan.py
+++ b/Mac/Modules/app/appscan.py
@@ -17,11 +17,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/carbonevt/CarbonEvtscan.py b/Mac/Modules/carbonevt/CarbonEvtscan.py
index 7307327..e29456f 100644
--- a/Mac/Modules/carbonevt/CarbonEvtscan.py
+++ b/Mac/Modules/carbonevt/CarbonEvtscan.py
@@ -12,18 +12,18 @@
 from scantools import Scanner, Scanner_OSX
 
 def main():
-    print "---Scanning CarbonEvents.h---"
+    print("---Scanning CarbonEvents.h---")
     input = ["CarbonEvents.h"]
     output = "CarbonEventsgen.py"
     defsoutput = TOOLBOXDIR + "CarbonEvents.py"
     scanner = CarbonEvents_Scanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "--done scanning, importing--"
+    print("--done scanning, importing--")
     import CarbonEvtsupport
-    print "done"
+    print("done")
 
 RefObjectTypes = ["EventRef",
                                 "EventQueueRef",
diff --git a/Mac/Modules/cf/cfscan.py b/Mac/Modules/cf/cfscan.py
index 5ff9534..20751ae 100644
--- a/Mac/Modules/cf/cfscan.py
+++ b/Mac/Modules/cf/cfscan.py
@@ -44,11 +44,11 @@
     scanner.scan()
     scanner.gentypetest(SHORT+"typetest.py")
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner_OSX):
 
diff --git a/Mac/Modules/cg/cgscan.py b/Mac/Modules/cg/cgscan.py
index 82f4919..ba0ff2a 100755
--- a/Mac/Modules/cg/cgscan.py
+++ b/Mac/Modules/cg/cgscan.py
@@ -22,11 +22,11 @@
     scanner.scan()
     scanner.gentypetest(SHORT+"typetest.py")
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner_OSX):
 
diff --git a/Mac/Modules/cm/cmscan.py b/Mac/Modules/cm/cmscan.py
index 1a1e46d..bbe0210 100644
--- a/Mac/Modules/cm/cmscan.py
+++ b/Mac/Modules/cm/cmscan.py
@@ -16,11 +16,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/ctl/ctlscan.py b/Mac/Modules/ctl/ctlscan.py
index dd74d23..323ff9a 100644
--- a/Mac/Modules/ctl/ctlscan.py
+++ b/Mac/Modules/ctl/ctlscan.py
@@ -14,11 +14,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now doing 'import ctlsupport' ==="
+    print("=== Done scanning and generating, now doing 'import ctlsupport' ===")
     import ctlsupport
-    print "=== Done.  It's up to you to compile Ctlmodule.c ==="
+    print("=== Done.  It's up to you to compile Ctlmodule.c ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/dlg/dlgscan.py b/Mac/Modules/dlg/dlgscan.py
index bf37129..fbdbc50 100644
--- a/Mac/Modules/dlg/dlgscan.py
+++ b/Mac/Modules/dlg/dlgscan.py
@@ -18,11 +18,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/drag/dragscan.py b/Mac/Modules/drag/dragscan.py
index e89897a..b1aa6d5 100644
--- a/Mac/Modules/drag/dragscan.py
+++ b/Mac/Modules/drag/dragscan.py
@@ -25,11 +25,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now doing 'import dragsupport' ==="
+    print("=== Done scanning and generating, now doing 'import dragsupport' ===")
     import dragsupport
-    print "=== Done.  It's up to you to compile Dragmodule.c ==="
+    print("=== Done.  It's up to you to compile Dragmodule.c ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/evt/evtscan.py b/Mac/Modules/evt/evtscan.py
index 0adce8b..8501f01 100644
--- a/Mac/Modules/evt/evtscan.py
+++ b/Mac/Modules/evt/evtscan.py
@@ -17,11 +17,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/file/filescan.py b/Mac/Modules/file/filescan.py
index b7c5d12..574a9d6 100644
--- a/Mac/Modules/file/filescan.py
+++ b/Mac/Modules/file/filescan.py
@@ -17,11 +17,11 @@
     scanner.scan()
     scanner.close()
     scanner.gentypetest(SHORT+"typetest.py")
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner_OSX):
 
diff --git a/Mac/Modules/fm/fmscan.py b/Mac/Modules/fm/fmscan.py
index 38abcac..ec6c597 100644
--- a/Mac/Modules/fm/fmscan.py
+++ b/Mac/Modules/fm/fmscan.py
@@ -16,11 +16,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/folder/folderscan.py b/Mac/Modules/folder/folderscan.py
index cccb720..2630642 100644
--- a/Mac/Modules/folder/folderscan.py
+++ b/Mac/Modules/folder/folderscan.py
@@ -18,11 +18,11 @@
     scanner.scan()
     scanner.close()
     scanner.gentypetest(SHORT+"typetest.py")
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner_OSX):
 
diff --git a/Mac/Modules/help/helpscan.py b/Mac/Modules/help/helpscan.py
index fa8dbde..7ad82e5 100644
--- a/Mac/Modules/help/helpscan.py
+++ b/Mac/Modules/help/helpscan.py
@@ -17,11 +17,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/ibcarbon/IBCarbonscan.py b/Mac/Modules/ibcarbon/IBCarbonscan.py
index eb7267d..9470dac 100644
--- a/Mac/Modules/ibcarbon/IBCarbonscan.py
+++ b/Mac/Modules/ibcarbon/IBCarbonscan.py
@@ -10,18 +10,18 @@
 from scantools import Scanner_OSX
 
 def main():
-    print "---Scanning IBCarbonRuntime.h---"
+    print("---Scanning IBCarbonRuntime.h---")
     input = ["IBCarbonRuntime.h"]
     output = "IBCarbongen.py"
     defsoutput = TOOLBOXDIR + "IBCarbonRuntime.py"
     scanner = IBCarbon_Scanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "--done scanning, importing--"
+    print("--done scanning, importing--")
     import IBCarbonsupport
-    print "done"
+    print("done")
 
 class IBCarbon_Scanner(Scanner_OSX):
 
diff --git a/Mac/Modules/icn/icnscan.py b/Mac/Modules/icn/icnscan.py
index 2d20062..3ee357c 100644
--- a/Mac/Modules/icn/icnscan.py
+++ b/Mac/Modules/icn/icnscan.py
@@ -17,11 +17,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/launch/launchscan.py b/Mac/Modules/launch/launchscan.py
index dd43e37..8d535fb 100644
--- a/Mac/Modules/launch/launchscan.py
+++ b/Mac/Modules/launch/launchscan.py
@@ -18,11 +18,11 @@
     scanner.scan()
     scanner.close()
     scanner.gentypetest(SHORT+"typetest.py")
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/list/listscan.py b/Mac/Modules/list/listscan.py
index 14e7dca..233ad5f 100644
--- a/Mac/Modules/list/listscan.py
+++ b/Mac/Modules/list/listscan.py
@@ -17,11 +17,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/menu/menuscan.py b/Mac/Modules/menu/menuscan.py
index 46afe16..bcd5019 100644
--- a/Mac/Modules/menu/menuscan.py
+++ b/Mac/Modules/menu/menuscan.py
@@ -13,11 +13,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now doing 'import menusupport' ==="
+    print("=== Done scanning and generating, now doing 'import menusupport' ===")
     import menusupport
-    print "=== Done.  It's up to you to compile Menumodule.c ==="
+    print("=== Done.  It's up to you to compile Menumodule.c ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/mlte/mltescan.py b/Mac/Modules/mlte/mltescan.py
index 9566ad7..ee095ec 100644
--- a/Mac/Modules/mlte/mltescan.py
+++ b/Mac/Modules/mlte/mltescan.py
@@ -19,11 +19,11 @@
     scanner.scan()
     scanner.gentypetest(SHORT+"typetest.py")
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner_OSX):
 
diff --git a/Mac/Modules/osa/osascan.py b/Mac/Modules/osa/osascan.py
index 8bad4b7..085dd10 100644
--- a/Mac/Modules/osa/osascan.py
+++ b/Mac/Modules/osa/osascan.py
@@ -17,11 +17,11 @@
     scanner.scan()
     scanner.close()
     scanner.gentypetest(SHORT+"typetest.py")
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/qd/qdscan.py b/Mac/Modules/qd/qdscan.py
index c601b0e..9c52f14 100644
--- a/Mac/Modules/qd/qdscan.py
+++ b/Mac/Modules/qd/qdscan.py
@@ -28,7 +28,7 @@
     except IOError:
         pass
     if have_extra:
-        print "=== Copying QuickDrawText stuff into main files... ==="
+        print("=== Copying QuickDrawText stuff into main files... ===")
         ifp = open("@qdgentext.py")
         ofp = open("qdgen.py", "a")
         ofp.write(ifp.read())
@@ -40,11 +40,11 @@
         ifp.close()
         ofp.close()
 
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     import qdsupport
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/qdoffs/qdoffsscan.py b/Mac/Modules/qdoffs/qdoffsscan.py
index 7e8f316..a7bf518 100644
--- a/Mac/Modules/qdoffs/qdoffsscan.py
+++ b/Mac/Modules/qdoffs/qdoffsscan.py
@@ -13,11 +13,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     import qdoffssupport
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/qt/qtscan.py b/Mac/Modules/qt/qtscan.py
index ac56144..97a776b 100644
--- a/Mac/Modules/qt/qtscan.py
+++ b/Mac/Modules/qt/qtscan.py
@@ -34,11 +34,11 @@
     scanner.scan()
     scanner.close()
     scanner.gentypetest(SHORT+"typetest.py")
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/res/resscan.py b/Mac/Modules/res/resscan.py
index 853fa13..42f01e0 100644
--- a/Mac/Modules/res/resscan.py
+++ b/Mac/Modules/res/resscan.py
@@ -19,11 +19,11 @@
     scanner = ResourcesScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now doing 'import ressupport' ==="
+    print("=== Done scanning and generating, now doing 'import ressupport' ===")
     import ressupport
-    print "=== Done 'import ressupport'.  It's up to you to compile Resmodule.c ==="
+    print("=== Done 'import ressupport'.  It's up to you to compile Resmodule.c ===")
 
 class ResourcesScanner(Scanner):
 
diff --git a/Mac/Modules/scrap/scrapscan.py b/Mac/Modules/scrap/scrapscan.py
index 7521fba..6239e92 100644
--- a/Mac/Modules/scrap/scrapscan.py
+++ b/Mac/Modules/scrap/scrapscan.py
@@ -21,9 +21,9 @@
     scanner.close()
 ##      print "=== Testing definitions output code ==="
 ##      exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/snd/sndscan.py b/Mac/Modules/snd/sndscan.py
index bcdd062..4c4a226 100644
--- a/Mac/Modules/snd/sndscan.py
+++ b/Mac/Modules/snd/sndscan.py
@@ -16,11 +16,11 @@
     scanner = SoundScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now doing 'import sndsupport' ==="
+    print("=== Done scanning and generating, now doing 'import sndsupport' ===")
     import sndsupport
-    print "=== Done.  It's up to you to compile Sndmodule.c ==="
+    print("=== Done.  It's up to you to compile Sndmodule.c ===")
 
 class SoundScanner(Scanner):
 
diff --git a/Mac/Modules/te/tescan.py b/Mac/Modules/te/tescan.py
index c0d6e1c..316b7fb 100644
--- a/Mac/Modules/te/tescan.py
+++ b/Mac/Modules/te/tescan.py
@@ -17,11 +17,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     exec "import " + SHORT + "support"
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Modules/win/winscan.py b/Mac/Modules/win/winscan.py
index 8d2cea9..023c737 100644
--- a/Mac/Modules/win/winscan.py
+++ b/Mac/Modules/win/winscan.py
@@ -13,11 +13,11 @@
     scanner = MyScanner(input, output, defsoutput)
     scanner.scan()
     scanner.close()
-    print "=== Testing definitions output code ==="
+    print("=== Testing definitions output code ===")
     exec(open(defsoutput).read(), {}, {})
-    print "=== Done scanning and generating, now importing the generated code... ==="
+    print("=== Done scanning and generating, now importing the generated code... ===")
     import winsupport
-    print "=== Done.  It's up to you to compile it now! ==="
+    print("=== Done.  It's up to you to compile it now! ===")
 
 class MyScanner(Scanner):
 
diff --git a/Mac/Tools/Doc/setup.py b/Mac/Tools/Doc/setup.py
index bd86a20..5f60c51 100644
--- a/Mac/Tools/Doc/setup.py
+++ b/Mac/Tools/Doc/setup.py
@@ -100,7 +100,7 @@
         if os.path.isdir(origPath):
             self.mkpath(outPath)
         elif ext == '.html':
-            if self.verbose: print 'hacking %s to %s' % (origPath,outPath)
+            if self.verbose: print('hacking %s to %s' % (origPath,outPath))
             hackedFile = file(outPath, 'w')
             origFile = file(origPath,'r')
             hackedFile.write(self.r.sub('<dl><dt><dd>', origFile.read()))
@@ -118,7 +118,7 @@
     def makeHelpIndex(self):
         app = '/Developer/Applications/Apple Help Indexing Tool.app'
         self.spawn('open', '-a', app , self.build_dest)
-        print "Please wait until Apple Help Indexing Tool finishes before installing"
+        print("Please wait until Apple Help Indexing Tool finishes before installing")
 
     def makeHelpIndex(self):
         app = HelpIndexingTool.HelpIndexingTool(start=1)
@@ -180,18 +180,18 @@
             self.build_dest = build_cmd.build_dest
         if self.install_doc == None:
             self.install_doc = os.path.join(self.prefix, DESTDIR)
-        print 'INSTALL', self.build_dest, '->', self.install_doc
+        print('INSTALL', self.build_dest, '->', self.install_doc)
 
     def run(self):
         self.finalize_options()
         self.ensure_finalized()
-        print "Running Installer"
+        print("Running Installer")
         instloc = self.install_doc
         if self.root:
             instloc = change_root(self.root, instloc)
         self.mkpath(instloc)
         copy_tree(self.build_dest, instloc)
-        print "Installation complete"
+        print("Installation complete")
 
 def mungeVersion(infile, outfile):
     i = file(infile,'r')
diff --git a/Mac/Tools/fixapplepython23.py b/Mac/Tools/fixapplepython23.py
index 6ba5401..01a09b5 100644
--- a/Mac/Tools/fixapplepython23.py
+++ b/Mac/Tools/fixapplepython23.py
@@ -57,23 +57,23 @@
             continue
         i = findline(lines, old)
         if i < 0:
-            print 'fixapplepython23: Python installation not fixed (appears broken)'
-            print 'fixapplepython23: missing line:', old
+            print('fixapplepython23: Python installation not fixed (appears broken)')
+            print('fixapplepython23: missing line:', old)
             return 2
         lines[i] = new
         fixed = True
 
     if fixed:
         if do_apply:
-            print 'fixapplepython23: Fix to Apple-installed Python 2.3 applied'
+            print('fixapplepython23: Fix to Apple-installed Python 2.3 applied')
             os.rename(makefile, makefile + '~')
             open(makefile, 'w').writelines(lines)
             return 0
         else:
-            print 'fixapplepython23: Fix to Apple-installed Python 2.3 should be applied'
+            print('fixapplepython23: Fix to Apple-installed Python 2.3 should be applied')
             return 1
     else:
-        print 'fixapplepython23: No fix needed, appears to have been applied before'
+        print('fixapplepython23: No fix needed, appears to have been applied before')
         return 0
 
 def makescript(filename, compiler):
@@ -85,7 +85,7 @@
     fp.write(SCRIPT % compiler)
     fp.close()
     os.chmod(filename, 0755)
-    print 'fixapplepython23: Created', filename
+    print('fixapplepython23: Created', filename)
 
 def main():
     # Check for -n option
@@ -96,24 +96,24 @@
     # First check OS version
     if sys.byteorder == 'little':
         # All intel macs are fine
-        print "fixapplypython23: no fix is needed on MacOSX on Intel"
+        print("fixapplypython23: no fix is needed on MacOSX on Intel")
         sys.exit(0)
 
     if gestalt.gestalt('sysv') < 0x1030:
-        print 'fixapplepython23: no fix needed on MacOSX < 10.3'
+        print('fixapplepython23: no fix needed on MacOSX < 10.3')
         sys.exit(0)
 
     if gestalt.gestalt('sysv') >= 0x1040:
-        print 'fixapplepython23: no fix needed on MacOSX >= 10.4'
+        print('fixapplepython23: no fix needed on MacOSX >= 10.4')
         sys.exit(0)
 
     # Test that a framework Python is indeed installed
     if not os.path.exists(MAKEFILE):
-        print 'fixapplepython23: Python framework does not appear to be installed (?), nothing fixed'
+        print('fixapplepython23: Python framework does not appear to be installed (?), nothing fixed')
         sys.exit(0)
     # Check that we can actually write the file
     if do_apply and not os.access(MAKEFILE, os.W_OK):
-        print 'fixapplepython23: No write permission, please run with "sudo"'
+        print('fixapplepython23: No write permission, please run with "sudo"')
         sys.exit(2)
     # Create the shell scripts
     if do_apply:
diff --git a/Mac/scripts/BuildApplet.py b/Mac/scripts/BuildApplet.py
index 9ddcd0b..e1f9ea1 100644
--- a/Mac/scripts/BuildApplet.py
+++ b/Mac/scripts/BuildApplet.py
@@ -116,18 +116,18 @@
                         progress=verbose, destroot=destroot)
 
 def usage():
-    print "BuildApplet creates an application from a Python source file"
-    print "Usage:"
-    print "  BuildApplet     interactive, single file, no options"
-    print "  BuildApplet src1.py src2.py ...   non-interactive multiple file"
-    print "  BuildApplet [options] src.py    non-interactive single file"
-    print "Options:"
-    print "  --output o        Output file; default based on source filename, short -o"
-    print "  --resource r      Resource file; default based on source filename, short -r"
-    print "  --noargv          Build applet without drag-and-drop sys.argv emulation, short -n, OSX only"
-    print "  --extra src[:dst] Extra file to put in .app bundle, short -e, OSX only"
-    print "  --verbose         Verbose, short -v"
-    print "  --help            This message, short -?"
+    print("BuildApplet creates an application from a Python source file")
+    print("Usage:")
+    print("  BuildApplet     interactive, single file, no options")
+    print("  BuildApplet src1.py src2.py ...   non-interactive multiple file")
+    print("  BuildApplet [options] src.py    non-interactive single file")
+    print("Options:")
+    print("  --output o        Output file; default based on source filename, short -o")
+    print("  --resource r      Resource file; default based on source filename, short -r")
+    print("  --noargv          Build applet without drag-and-drop sys.argv emulation, short -n, OSX only")
+    print("  --extra src[:dst] Extra file to put in .app bundle, short -e, OSX only")
+    print("  --verbose         Verbose, short -v")
+    print("  --help            This message, short -?")
     sys.exit(1)
 
 class Verbose:
diff --git a/Mac/scripts/bgenall.py b/Mac/scripts/bgenall.py
index 1fe5f34..dc33163 100644
--- a/Mac/scripts/bgenall.py
+++ b/Mac/scripts/bgenall.py
@@ -6,7 +6,7 @@
 
 def bgenone(dirname, shortname):
     os.chdir(dirname)
-    print '%s:'%shortname
+    print('%s:'%shortname)
     # Sigh, we don't want to lose CVS history, so two
     # modules have funny names:
     if shortname == 'carbonevt':
@@ -18,12 +18,12 @@
     try:
         m = __import__(modulename)
     except:
-        print "Error:", shortname, sys.exc_info()[1]
+        print("Error:", shortname, sys.exc_info()[1])
         return 0
     try:
         m.main()
     except:
-        print "Error:", shortname, sys.exc_info()[1]
+        print("Error:", shortname, sys.exc_info()[1])
         return 0
     return 1
 
@@ -45,9 +45,9 @@
                 success.append(name)
             else:
                 failure.append(name)
-    print 'Done:', string.join(success, ' ')
+    print('Done:', string.join(success, ' '))
     if failure:
-        print 'Failed:', string.join(failure, ' ')
+        print('Failed:', string.join(failure, ' '))
         return 0
     return 1
 
diff --git a/Mac/scripts/buildpkg.py b/Mac/scripts/buildpkg.py
index e50c405..73dd4b6 100644
--- a/Mac/scripts/buildpkg.py
+++ b/Mac/scripts/buildpkg.py
@@ -417,18 +417,18 @@
     "Print usage message."
 
     format = "Usage: %s <opts1> [<opts2>] <root> [<resources>]"
-    print format % basename(sys.argv[0])
-    print
-    print "       with arguments:"
-    print "           (mandatory) root:         the package root folder"
-    print "           (optional)  resources:    the package resources folder"
-    print
-    print "       and options:"
-    print "           (mandatory) opts1:"
+    print(format % basename(sys.argv[0]))
+    print()
+    print("       with arguments:")
+    print("           (mandatory) root:         the package root folder")
+    print("           (optional)  resources:    the package resources folder")
+    print()
+    print("       and options:")
+    print("           (mandatory) opts1:")
     mandatoryKeys = string.split("Title Version Description", " ")
     for k in mandatoryKeys:
-        print "               --%s" % k
-    print "           (optional) opts2: (with default values)"
+        print("               --%s" % k)
+    print("           (optional) opts2: (with default values)")
 
     pmDefaults = PackageMaker.packageInfoDefaults
     optionalKeys = pmDefaults.keys()
@@ -439,7 +439,7 @@
     for k in optionalKeys:
         format = "               --%%s:%s %%s"
         format = format % (" " * (maxKeyLen-len(k)))
-        print format % (k, repr(pmDefaults[k]))
+        print(format % (k, repr(pmDefaults[k])))
 
 
 def main():
@@ -452,7 +452,7 @@
     try:
         opts, args = getopt.getopt(sys.argv[1:], shortOpts, longOpts)
     except getopt.GetoptError as details:
-        print details
+        print(details)
         printUsage()
         return
 
@@ -462,11 +462,11 @@
 
     ok = optsDict.keys()
     if not (1 <= len(args) <= 2):
-        print "No argument given!"
+        print("No argument given!")
     elif not ("Title" in ok and \
               "Version" in ok and \
               "Description" in ok):
-        print "Missing mandatory option!"
+        print("Missing mandatory option!")
     else:
         buildPackage(*args, **optsDict)
         return
diff --git a/Mac/scripts/mkestrres.py b/Mac/scripts/mkestrres.py
index 715b8c6..d423892 100644
--- a/Mac/scripts/mkestrres.py
+++ b/Mac/scripts/mkestrres.py
@@ -68,9 +68,9 @@
             if not dict.has_key(number):
                 dict[number] = desc, name
             else:
-                print 'DUPLICATE', number
-                print '\t', dict[number]
-                print '\t', (desc, name)
+                print('DUPLICATE', number)
+                print('\t', dict[number])
+                print('\t', (desc, name))
 
 def parse_errors_h(fp, dict):
     errno_prog = re.compile(ERRORS_PROG)
@@ -95,11 +95,11 @@
             if not dict.has_key(number):
                 dict[number] = desc, name
             else:
-                print 'DUPLICATE', number
-                print '\t', dict[number]
-                print '\t', (desc, name)
+                print('DUPLICATE', number)
+                print('\t', dict[number])
+                print('\t', (desc, name))
                 if len(desc) > len(dict[number][0]):
-                    print 'Pick second one'
+                    print('Pick second one')
                     dict[number] = desc, name
 
 def main():
diff --git a/Mac/scripts/zappycfiles.py b/Mac/scripts/zappycfiles.py
index a8193c1..77258da 100644
--- a/Mac/scripts/zappycfiles.py
+++ b/Mac/scripts/zappycfiles.py
@@ -16,7 +16,7 @@
                 sys.exit(0)
             zappyc(dir)
         else:
-            print 'Usage: zappyc dir ...'
+            print('Usage: zappyc dir ...')
             sys.exit(1)
     for dir in sys.argv[1:]:
         zappyc(dir)
@@ -28,7 +28,7 @@
     for name in names:
         if name[-4:] in ('.pyc', '.pyo'):
             path = os.path.join(top, name)
-            print 'Zapping', path
+            print('Zapping', path)
             if doit:
                 os.unlink(path)
 
diff --git a/Misc/find_recursionlimit.py b/Misc/find_recursionlimit.py
index 32bdae4..b7592ce 100644
--- a/Misc/find_recursionlimit.py
+++ b/Misc/find_recursionlimit.py
@@ -62,16 +62,16 @@
 def check_limit(n, test_func_name):
     sys.setrecursionlimit(n)
     if test_func_name.startswith("test_"):
-        print test_func_name[5:]
+        print(test_func_name[5:])
     else:
-        print test_func_name
+        print(test_func_name)
     test_func = globals()[test_func_name]
     try:
         test_func()
     except RuntimeError:
         pass
     else:
-        print "Yikes!"
+        print("Yikes!")
 
 limit = 1000
 while 1:
@@ -81,5 +81,5 @@
     check_limit(limit, "test_init")
     check_limit(limit, "test_getattr")
     check_limit(limit, "test_getitem")
-    print "Limit of %d is fine" % limit
+    print("Limit of %d is fine" % limit)
     limit = limit + 100
diff --git a/PCbuild/field3.py b/PCbuild/field3.py
index 47f24ca..edcbe36 100644
--- a/PCbuild/field3.py
+++ b/PCbuild/field3.py
@@ -22,14 +22,14 @@
            }[level]
 string = sys.version.split()[0] # like '2.3a0'
 
-print " * For %s," % string
-print " * PY_MICRO_VERSION = %d" % micro
-print " * PY_RELEASE_LEVEL = %r = %s" % (level, hex(levelnum))
-print " * PY_RELEASE_SERIAL = %d" % serial
-print " *"
+print(" * For %s," % string)
+print(" * PY_MICRO_VERSION = %d" % micro)
+print(" * PY_RELEASE_LEVEL = %r = %s" % (level, hex(levelnum)))
+print(" * PY_RELEASE_SERIAL = %d" % serial)
+print(" *")
 
 field3 = micro * 1000 + levelnum * 10 + serial
 
-print " * and %d*1000 + %d*10 + %d = %d" % (micro, levelnum, serial, field3)
-print " */"
-print "#define FIELD3", field3
+print(" * and %d*1000 + %d*10 + %d = %d" % (micro, levelnum, serial, field3))
+print(" */")
+print("#define FIELD3", field3)
