无法将swig生成的python模块导入C ++

时间:2015-12-21 23:46:48

标签: python c++ swig

我使用swig生成一个包含一些C ++代码的python模块:

我的.i文件:

%module module_test

%{
#define SWIG_FILE_WITH_INIT
#include "headers.h"
%}

%include "headers.h"

我运行了这些命令:

swig -c ++ -python swig.i

swig -Wall -c ++ -python -external-runtime runtime_swig.h

构建之后,生成了module_test.py和_module_test.pyd文件。 包装器在python中运行良好。

现在,从另一个C ++项目我尝试加载这个新的python模块,使用以下代码:

 Py_Initialize();

  PySys_SetPath(L"path_to_my_files");
  PyObject * pName = PyString_FromString("module_test.py");

  PyObject *module = PyImport_Import(pName);

  if(module == NULL)
  {
     PyErr_Print();
    std::cout << "module == NULL !!";
    exit(-1);
  }

但导入失败并显示错误:

 import imp
ImportError: No module named 'imp'

有人可以告诉我发生了什么事吗? swig生成的module_test.py文件正在执行&#34; import imp&#34;在代码中,但是当我从python运行文件时,这个导入永远不会失败... 我是否需要指定其他内容,以便C ++代码知道&#34; imp&#34;是吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

通过改为解决它:

PyObject *sys = PyImport_ImportModule("sys");
  PyObject *path = PyObject_GetAttrString(sys, "path");
  PyList_Append(path, PyString_FromString("path_to_file"));