那么在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
每个模块命名的硬链接(hard link)。能够找到该模块。声明import <x>
导入名为 <x>
的模块通过寻找导出的PyInit_<x>
来自 <x>-*.so
的函数.
也就是说,您构建为 foo.so
并创建bar.so
作为 foo.so
的硬链接(hard link)。您的包结构如下所示:
/mypackage/__init__.py
/mypackage/foo.so
/mypackage/bar.so -> foo.so # hardlink
关于python - native 扩展可以支持多个模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63876741/