簡體   English   中英

C-> Python導入包裝器問題

[英]C ->Python Import Wrapper Problems

我已經在我的C文件blargUtils.c中定義了包裝對象的名稱,如下所示(我在Blargmethods中定義了方法及其用途)...

void initBlarg(){
    Py_InitModule("Blarg", Blargmethods);
}

我這樣編譯它...

blarglib: blargUtils.c
    gcc -I/usr/include/python2.6 -fPIC -c blargUtils.c -Wall    
    gcc -shared blargUtils.o -o blargUtils.so
clean:  
    rm *.so

但是,當我嘗試在我的python腳本中導入包裝器時...

import Blarg

它說:“ ImportError:沒有名為Blarg的模塊”。 我在這里有點迷茫,我不明白為什么當它們完全相同的拼寫時卻找不到類。 也許是邏輯錯誤?

如果需要更多代碼,請告訴我。

首先,從評論看,我發現重命名是行不通的。 這意味着(1)python找不到.so文件,(2).so文件不可用(即,編譯不正確或未找到所有必需的符號),或(3)存在.py /相同名稱的.pyc / .pyo文件。 如果您已經定義了Blarg.py,python將首先查看此文件。 如果在搜索路徑中有一個名為Blarg的目錄,情況也是如此。 因此,不要將頭撞在牆上,請嘗試以下操作:

1)重命名您的.so庫以保證不會沖突(例如_Blarg)

void initBlarg() {
    Py_InitModule("_Blarg", Blargmethods);
}

2)用相同的名稱編譯

gcc -I/usr/include/python2.6 -fPIC -c blargUtils.c -Wall    
gcc -shared blargUtils.o -Wl,-soname -Wl,_Blarg.so -o _Blarg.so

3)創建一個python包裝器(即Blarg.py)

import sys
sys.path.append('/path/to/your/library')

import _Blarg

def blargFunc1(*args):
    """Wrap blargFunc1"""
    return _Blarg.blargFunc1(*args)

4)現在只需正常使用

import Blarg
Blarg.blargFunc1(1, 2, 3)

顯然,這有點矯kill過正,但是它應該可以幫助您確定問題出在哪里。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM