本机扩展可以支持多个模块吗?

问题描述

因此,在python本机扩展中,是否可以在单个共享库中实现多个模块?那么共享库的名称应该是什么?

PyMODINIT_FUNC PyInit_foo(void) { PyModule_Create(...); }
PyMODINIT_FUNC PyInit_bar(void) { PyModule_Create(...); }

我应该命名库文件foo.so还是bar.so?并将import foo;仅导入foo还是同时导入foobar模块?

解决方法

可以。最简单的方法是为importlib创建以每个模块命名的硬链接,以便能够查找该模块。语句import <x>通过从<x>寻找导出的PyInit_<x>函数来导入名为<x>-*.so的模块。

也就是说,您以foo.so的身份进行构建,并创建bar.so作为与foo.so的硬链接。您的程序包结构如下:

/mypackage/__init__.py
/mypackage/foo.so
/mypackage/bar.so -> foo.so # hardlink