diff --git a/.circleci/config.yml b/.circleci/config.yml
index d09559193..8e3f51ce8 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -10,7 +10,7 @@ jobs:
       - checkout
       - run:
           name: Install
-          command: apt update && apt install -y python g++ libpq-dev postgresql build-essential make autoconf dh-autoreconf autoconf-archive automake cppcheck
+          command: apt update && apt install -y python3 g++ libpq-dev postgresql build-essential make autoconf dh-autoreconf autoconf-archive automake cppcheck
       - run:
           name: Identify
           command: lsb_release -a && c++ --version
diff --git a/tools/splitconfig b/tools/splitconfig
index 9d4c5ebf0..04d39d6af 100755
--- a/tools/splitconfig
+++ b/tools/splitconfig
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 
 """Extract configuration items into various configuration headers.
 
@@ -183,15 +183,15 @@ def generate_config(source_tree, header_lines, items, publication, factor):
     unicode_path = config_file.encode(guess_output_encoding(), 'replace')
     section = extract_section(header_lines, items, publication, factor)
     if len(section) == 0:
-        print("Generating %s: no items--skipping." % unicode_path)
+        print("Generating {}: no items--skipping.".format(unicode_path))
         return
 
     contents = compose_header(section, publication, factor)
     if read_text_file(config_file) == contents:
-        print("Generating %s: no changes--skipping." % unicode_path)
+        print("Generating {}: no changes--skipping.".format(unicode_path))
         return
 
-    print("Generating %s: %d item(s)." % (unicode_path, len(section)))
+    print("Generating {}: {} item(s).".format(unicode_path, len(section)))
     path = encode_path(config_file)
     with codecs.open(path, 'wb', encoding='ascii') as header:
         header.write(contents)
diff --git a/tools/template2mak.py b/tools/template2mak.py
index 93b6ddcd1..4b5330633 100755
--- a/tools/template2mak.py
+++ b/tools/template2mak.py
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 """Minimal macro processor.  Used for generating VC++ makefiles.
 
 The available template commands are:
diff --git a/win32/INSTALL.txt b/win32/INSTALL.txt
index d5a6c6cc8..17b34bba9 100644
--- a/win32/INSTALL.txt
+++ b/win32/INSTALL.txt
@@ -137,7 +137,7 @@ iii) If you are building libpqxx from a development source tree rather than from
     a release distribution, you may not have the makefiles for your compiler.
     These makefiles should be in the `win32` directory and have names ending in
     ".mak": "mingw.mak," "vc-libpqxx.mak," "vc-test.mak," and so on.  If you
-    don't have these files but you do have a python interpreter, you can
+    don't have these files but you do have a python3 interpreter, you can
     generate them using the template2mak.py script in the tools directory:
 
     tools/template2mak.py win32/mingw.mak.template win32/mingw.mak