簡體   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