diff -aup boost_1_63_0/libs/python/test/exec.cpp.orig	boost_1_63_0/libs/python/test/exec.cpp
--- boost_1_63_0/libs/python/test/exec.cpp.orig	2017-01-02 05:05:18.000000000 -0500
+++ boost_1_63_0/libs/python/test/exec.cpp	2017-01-02 08:36:49.421564200 -0500
@@ -56,8 +56,23 @@
   BOOST_TEST(value == "ABCDEFG");
 }
 
+struct PyCtx
+{
+  PyCtx() {
+    Py_Initialize();
+  }
+
+  ~PyCtx() {
+    // N.B. certain problems may arise when Py_Finalize is called when
+    // using Boost.Python.  However in this test suite it all seems to
+    // work fine.
+    Py_Finalize();
+  }
+};
+
 void exec_test()
 {
+  PyCtx ctx;
   // Retrieve the main module
   python::object main = python::import("__main__");
   
@@ -137,6 +152,19 @@
                 "there was no exception handler registered.");
   }
 }
+ 
+template <class Cb>
+bool
+run_and_handle_exception(Cb cb, bool pyerr_expected = false)
+{
+  PyCtx ctx;
+  if (python::handle_exception(cb)) {
+    check_pyerr(pyerr_expected);
+    return true;
+  } else {
+    return false;
+  }
+}
 
 int main(int argc, char **argv)
 {
@@ -156,37 +184,27 @@
                  "builtin modules");
   }
 
-  // Initialize the interpreter
-  Py_Initialize();
-
-  if (python::handle_exception(eval_test)) {
-    check_pyerr();
-  }
-  else if(python::handle_exception(exec_test)) {
-    check_pyerr();
-  }
-  else if (python::handle_exception(boost::bind(exec_file_test, script))) {
-    check_pyerr();
-  }
-  
-  if (python::handle_exception(exec_test_error))
-  {
+  // N.B. exec_test mustn't be called through run_and_handle_exception
+  // as it needs to handles the python context by itself.
+  if (run_and_handle_exception(eval_test)
+      || python::handle_exception(exec_test))
     check_pyerr(/*pyerr_expected*/ true);
-  }
   else
+    run_and_handle_exception(boost::bind(exec_file_test, script));
+
+  if (!run_and_handle_exception(exec_test_error, true))
   {
     BOOST_ERROR("Python exception expected, but not seen.");
   }
 
   if (argc > 2) {
+    PyCtx ctx;
     // The main purpose is to test compilation. Since this test generates
     // a file and I (rwgk) am uncertain about the side-effects, run it only
     // if explicitly requested.
     exercise_embedding_html();
   }
 
-  // Boost.Python doesn't support Py_Finalize yet.
-  // Py_Finalize();
   return boost::report_errors();
 }
 
Diff finished.  Fri Jan  9 21:31:13 2015
