2012-07-26 47 views
1

我在C++应用程序中编写了一个python嵌入。相关的代码片段,我声明蟒的模块(用户定义的),其需要被嵌入如下:嵌入式应用程序未检测到/已知C++模块

boost::python::object main_module = boost::python::import("__main__"); 
boost::python::object main_namespace = main_module.attr("__dict__"); 
boost::python::exec("import python_module", main_namespace); //This line is the culprit 

然而,我卡时收到以下错误:

terminate called after throwing an instance of 'boost::python::error_already_set' 

我的用户定义的python模块与我的C++代码位于同一个目录中。当我尝试使用numpy这个工程时,问题是只有用户定义的那个,它不会。可以做些什么来调试它?

编辑:

后,我包括在try/catch块的代码,我得到下面的编译错误:

ImportError: No module named python_module 

我也尝试添加此:

boost::python::exec("import sys; sys.path.append('/path/to/python_module.py');", main_namespace); 

boost::python::exec("import python_module", main_namespace); 

但还没有工作。

现在的问题是如何让我的C++代码知道它?

回答

1

您可以尝试几件事情:

  1. 在你的C++应用程序:boost::python::exec("import sys; sys.path.append('/path/to'); import python_module; del sys"), main_namespace);,或

  2. 在你的shell:cd /path/to; call-your-c++-app。然后,在C++中,您只需要boost::python::exec("import python_module");

  3. 将您的环境变量设置为export PYTHONPATH=/path/to:${PYTHONPATH}并执行您的程序。在这种情况下,您的C++只需要boost::python::exec("import python_module");,就像上面的解决方案一样。

的问题:你需要导致该模块的路径追加到sys.path路径模块文件本身。

另一个提示:默认情况下,Python将从当前目录加载模块。如果你在cd那里,并从该目录执行你的应用程序,它应该在当前目录中找到该模块。

相关问题