问题描述
因此,在python本机扩展中,是否可以在单个共享库中实现多个模块?那么共享库的名称应该是什么?
PyMODINIT_FUNC PyInit_foo(void) { PyModule_Create(...); }
PyMODINIT_FUNC PyInit_bar(void) { PyModule_Create(...); }
我应该命名库文件foo.so
还是bar.so
?并将import foo;
仅导入foo
还是同时导入foo
和bar
模块?
解决方法
可以。最简单的方法是为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