python 使用SWIG生成多个模块

kcwpcxri  于 2023-01-16  发布在  Python
关注(0)|答案(1)|浏览(213)

使用SWIG为我的C项目生成Python绑定并不容易,但我终于能够做到了。唯一的问题是生成的.py文件非常大,它基本上包含了我 Package 的C代码的类和方法定义(但对于Python是可调用的)。我基本上想将生成的.py文件模块化为相关类的子模块。
下面是我的swig接口文件的基本和精简的示例:

%module example
%{
/* these two headers should belong to ModuleOne */
#include "header1.hpp"
#include "header2.hpp"

/* these two headers should belong to ModuleTwo */
#include "header3.hpp"
#include "header4.hpp"
}
%include "header1.hpp"
%include "header2.hpp"
%include "header3.hpp"
%include "header4.hpp"

从Python导入包的过程如下:

from example import *

我发现这很麻烦,因为我要么需要用from example import ClassOne单独导入每个类,要么需要导入整个模块。
我该如何创建swig生成的.py文件的“子模块”,让我可以更清晰地模块化我的项目,并导入这些子模块,而不必导入整个包。例如:

import example.ModuleOne
import example.ModuleTwo
m1m5dgzv

m1m5dgzv1#

我认为您只需要添加一个导入两个模块的__init__.py文件,如下所示:

from example.ModuleOne import *
from example.ModuleTwo import *
__all__ = [x for x in dir() if x[0] != '_']

最后一行允许程序使用from example import *导入所有内容。
编辑:我刚刚仔细阅读了你的问题,意识到你只想导入一个子模块。你仍然需要一个__init__.py文件来把你的两个模块组成一个包,但是它可以是空的。你的接口文件应该包括一个包声明,例如%module(package="example") ModuleOne

相关问题