gpt4 book ai didi

python - C -> Python 导入包装器问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:35 27 4
gpt4 key购买 nike

我已经在我的 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 的模块”。我在这里有点迷路,我不明白为什么当它们的拼写完全相同时它找不到类(class)。可能是逻辑错误?

如果需要更多代码,请告诉我。

最佳答案

首先,通过查看评论,我发现重命名它没有用。这意味着 (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)

显然这有点矫枉过正,但它应该可以帮助您确定问题出在哪里。希望这会有所帮助。

关于python - C -> Python 导入包装器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5331167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com