1

我正在编写一个嵌入到 C++ 应用程序中的 python。我声明需要嵌入的python(用户自定义)模块的相关代码片段如下:

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++ 代码知道它?

4

1 回答 1

1

你可以尝试几件事:

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

  2. 在你的外壳中: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在那里并从该目录执行您的应用程序,它应该在当前目录中找到该模块。

于 2013-02-11T21:31:51.447 回答