python - native 扩展可以支持多个模块吗?

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

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

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

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

最佳答案

是的,你可以。最简单的方法是创建以 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/

相关文章:

python - 在 pandas 数据框列中的某个单词处拆分文本

python - TensorFlow 中的 tf.argmax() 与 tf.arg_max()

python - Pandas 数据精度

python - 在 python 模块的 py.test 测试目录中,导入该模块的文件

Python模块名称冲突

python - 为什么 CPython 不将 `sphinx.autodoc` 用于标准库?

Python:如何对 Pandas 中的人之间的付款进行分组和求和?

python - math.py 和 sys.py 在哪里?

python - Ironpython:函数在 CPython 中工作,IronPython 中神秘的空指针异常

c - 使用 Vix 发送到虚拟机的命令序列有时会失败