2015-12-21 28 views
0

我用痛飲以生成結束了一些C++代碼一個python模塊一個python模塊:未能導入由痛飲生成到C++

我的.i文件:

%module module_test 

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

%include "headers.h" 

我跑這些命令:

痛飲-C++ -python swig.i

痛飲-Wall -C++ -python -external運行時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文件在代碼中執行「import imp」,但是當我從python運行文件時,此導入永遠不會失敗...... 我是否需要指定其他內容以便C++代碼知道「小鬼「是?

謝謝!

回答

0

使用,而不是解決它:

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

您可能也有興趣http://stackoverflow.com/a/25645539/168175它建立在模塊。 – Flexo