新人弱问:VC6 + python2.5 下编译python C扩展

新人弱问:VC6 + python2.5 下编译python C扩展

VC6 + python2.5 下编译python C扩展求助

代码 hello.c 如下

#include <Python.h>

static PyObject *
hello_echo(PyObject *self, PyObject *args, PyObject *keywds)
{  
    char    *something;

    if (!PyArg_ParseTuple(args, "s", &something))
        return NULL;
   
    printf("%s\n", something);
    Py_INCREF(Py_None);
    return Py_None;
}

static PyMethodDef hello_methods[] = {
    {"echo", (PyCFunction)hello_echo, METH_VARARGS | METH_KEYWORDS, "print string"},
    {NULL, NULL, 0, NULL}
};

void
inithello(void)
{
    Py_InitModule("hello", hello_methods);
}

VC6下先建一空WIn32 DLL工程,然后加入此文件,更改编译选项至Multithreded Dll,输出hello.pyd
编译release版本

在python shell上输入import hello,报如下错误:
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import hello
  File "D:\Python25\prog\hello.py", line 2, in <module>
    hello.echo("hehe, hello")
AttributeError: 'module' object has no attribute 'echo'


为什么说module无echo属性?
感觉你的hello.pyd与你的程序hello.py重了,因此导入的不对。改个名字再试吧。
我将hello.py改成hellome.py 结果变为
Traceback (most recent call last):
  File "D:\Python25\prog\hellome.py", line 1, in <module>
    import hello
ImportError: No module named hello
说明你的模块没找到。检查你的hello.pyd是否在sys.path可以找到的某个目录下,或者放在hellome.py相同的目录下。如果不是使用python的命令行环境,要确保hello.pyd可以在sys.path的某个目录下。
我将VC6编译生成的hello.pyd放到了D:\Python25\DLLs目录下,同时也放到了hellome.py相同目录下


我在命令行下直接 import hello也报 No module named hello

我怀疑是不是我生成的hello.pyd有问题?????

有可能,在你的目录下进入python命令行,然后执行import hello看一看会不会报错
是我的pyd文件名大小写没分,python不识别