AttributeError:’module’对象在尝试将c代码导入python时没有属性

我有一个导入来导入在c中创建的共享对象库。 它看起来像这样:

import Cal 

然后我尝试使用共享对象库在python中进行调用,如下所示:

 status = Cal.Cal_readFile(filename, result) 

但是,当我在运行我的python文件时遇到此代码时,我收到以下错误:

 Exception in Tkinter callback Traceback (most recent call last): File "/usr/lib/python3.4/tkinter/__init__.py", line 1541, in __call__ return self.func(*args) File "xcal.py", line 72, in openDialog status = Cal.Cal_readFile(filename, result) AttributeError: 'module' object has no attribute 'Cal_readFile' 

我的共享对象库的makefile如下所示:

 CC = gcc CFLAGS = -Wall -std=c11 -g -DNDEBUG `pkg-config --cflags python3` CFLAGS += -fPIC LDFLAGS=`pkg-config --libs python3` all: caltool Cal.so Cal.so: calmodule.o calutil.o $(CC) -shared $(LDFLAGS) $^ -o $@ calutil.o: calutil.c calutil.h calmodule.o: calmodule.c calutil.c 

我的C代码如下所示:

 #include  #include "calutil.h" PyObject *Cal_readFile( PyObject *self, PyObject *args ); static PyMethodDef CalMethods[] = { {"readFile", Cal_readFile, METH_VARARGS}, {NULL, NULL} }; static struct PyModuleDef calModuleDef = { PyModuleDef_HEAD_INIT, "Cal", //enable "import Cal" NULL, //omit module documentation -1, //don't reinitialize the module CalMethods //link module name "Cal" to methods table }; PyMODINIT_FUNC PyInit_Cal(void) { return PyModule_Create( &calModuleDef ); } PyObject *Cal_writeFile( PyObject *self, PyObject *args ) { return NULL; } 

注意:Cal_writeFile函数实际上确实发生了一些事情,只是我不想粘贴大函数,因为它可能不需要解决这个问题。

我在这里做错了吗? 我觉得Python import Cal应该正确导入名为Cal.so的共享对象库,该库与Python文件位于同一目录中。

 static PyMethodDef CalMethods[] = { {"readFile", Cal_readFile, METH_VARARGS}, {NULL, NULL} }; 

您为函数提供的Python可见名称是readFile 。 您需要通过该名称访问它,而不是Cal_readFile