无法将 swig 生成的 python 模块导入 C++
failing to import a python module generated by swig into C++
我使用 swig 生成了一个 python 模块,它包装了一些 C++ 代码:
我的 .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-运行time 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++ 代码知道 "imp" 是什么?
谢谢!
通过使用解决了它:
PyObject *sys = PyImport_ImportModule("sys");
PyObject *path = PyObject_GetAttrString(sys, "path");
PyList_Append(path, PyString_FromString("path_to_file"));
我使用 swig 生成了一个 python 模块,它包装了一些 C++ 代码:
我的 .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-运行time 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++ 代码知道 "imp" 是什么?
谢谢!
通过使用解决了它:
PyObject *sys = PyImport_ImportModule("sys");
PyObject *path = PyObject_GetAttrString(sys, "path");
PyList_Append(path, PyString_FromString("path_to_file"));