I am trying to create an executable which will start a python interpreter, import a module written in python, called entry.py, run its run() method and then quit. I have this part done, although I use only the C API. Now I define a boost python module like so struct World { void set(std::string msg) { this->msg = msg; } std::string greet() { return msg; } std::string msg; }; BOOST_PYTHON_MODULE(hello) { class_<World>("World") .def("greet", &World::greet) .def("set", &World::set) ; } In my entry.py I have the simple code import hello def run(): planet = hello.World() planet.set("howdy") print planet.greet() When I run my executable, it tells me that World is undefined in the entry module. However, if in C++ I use code like this PyRun_SimpleString("import hello"); PyRun_SimpleString("planet = hello.World()"); PyRun_SimpleString("planet.set('howdy')"); PyRun_SimpleString("print planet.greet()"); It works! What am I doing wrong? I am attaching my (very short) code. Be advised that I am using the funky platform of Windows XP, cygwin and GCC 3.4, boost 1.33.1. That might be the problem, but I have no other platform to try this on easily. What am I missing here? Best, George