[英]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.