【问题标题】:Can a native extension support multiple modules?原生扩展可以支持多个模块吗?
【发布时间】:2020-12-31 17:29:47
【问题描述】:

那么在python原生扩展中,是否可以在一个共享库中实现多个模块?那么共享库的名称应该是什么?

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

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

【问题讨论】:

标签: python python-module cpython python-c-api


【解决方案1】:

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

也就是说,您构建为foo.so 并创建bar.so 作为到foo.so 的硬链接。您的包结构如下所示:

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

【讨论】:

    猜你喜欢
    • 2012-02-15
    • 1970-01-01
    • 2019-05-29
    • 2018-04-12
    • 2014-09-10
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    相关资源
    最近更新 更多