2015-12-21 2 views
0

я глотнул, чтобы сгенерировать модуль питона, который оборачивает некоторые C++ код C++:не в состоянии импортировать модуль питона, порожденную глотка в

мой .и файл:

%module module_test 

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

%include "headers.h" 

Я побежал эти команды :

-C++ SWIG -python swig.i

-Wall -c SWIG ++ -python -Внешние-среда runtime_swig.h

После создания этого файла были созданы файлы module_test.py и _module_test.pyd. Обертка отлично работает на питоне.

Теперь, с другой C++ проекта я пытаюсь загрузить этот новый модуль питона, используя следующий код:

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' 
Может

кто-то скажите, пожалуйста, что происходит? Файл module_test.py, сгенерированный swig, выполняет «импортный имп» в коде, но этот импорт никогда не прерывался при запуске файла из python ... Нужно ли мне указывать что-то еще, чтобы код на C++ знал, что " imp "есть?

спасибо!

ответ

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