繁体   English   中英

使用 ctypes 创建 python 模块

[英]creating a python module using ctypes

我有一个 C 库,只有两个函数: char *foo_decode(const char*)const char *foo_version()

我现在想创建一个允许调用这两个函数的 python 模块。

C 库被编译成foo.so

这是我的 python 模块文件:

$ cat foo.py
import ctypes as ct

_lib = ct.cdll.LoadLibrary("./foo.so")
_lib.foo_decode.argtypes = [ct.c_char_p]
_lib.foo_decode.restype = ct.c_char_p
_lib.foo_version.argtypes = []
_lib.foo_version.restype = ct.c_char_p

def decode(fooText):
    return _lib.foo_decode(fooText.encode('utf8')).decode('utf-8')
    
def version():
    return _lib.foo_version().decode('utf-8')

我跟着这个教程

当我启动 python3 解释器并手动执行它时。 一切正常。 我可以调用这些函数并得到预期的结果。

但是当我导入我的模块文件( import foo )时,我收到错误ImportError: dynamic module does not define module export function (PyInit_foo)

发生了什么,我应该怎么做才能解决这个问题?

我的目标是通过 pip 安装生成可下载的 package。 我在正确的轨道上吗? 我不想要轮子,因为代码很小并且没有依赖关系。 因此,我应该快速编译并且应该非常便携。

你有一个共享库foo.so和一个模块foo.py 当 Python 确实import foo它只加载其中一个; 在您的情况下,它是foo.so foo.so不是 Python 模块,因此出现错误。

将您的foo.py重命名为不同的名称,例如foo_wrapper.py并尝试import foo_wrapper

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM