--- /dev/null
+diff -up boost_1_55_0/libs/python/test/exec.cpp\~ boost_1_55_0/libs/python/test/exec.cpp
+--- boost_1_55_0/libs/python/test/exec.cpp~ 2010-07-05 00:38:38.000000000 +0200
++++ boost_1_55_0/libs/python/test/exec.cpp 2015-01-09 21:31:12.903218280 +0100
+@@ -56,6 +56,20 @@ void eval_test()
+ 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()
+ {
+ // Register the module with the interpreter
+@@ -68,6 +82,8 @@ void exec_test()
+ ) == -1)
+ throw std::runtime_error("Failed to add embedded_hello to the interpreter's "
+ "builtin modules");
++
++ PyCtx ctx;
+ // Retrieve the main module
+ python::object main = python::import("__main__");
+
+@@ -148,41 +164,43 @@ void check_pyerr(bool pyerr_expected=fal
+ }
+ }
+
++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)
+ {
+ BOOST_TEST(argc == 2 || argc == 3);
+ std::string script = argv[1];
+- // 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))) {
++ // 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();
+- }
+-
+- if (python::handle_exception(exec_test_error))
+- {
+- 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