Chinaunix首页 | 论坛 | 博客
  • 博客访问: 159939
  • 博文数量: 16
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 195
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-29 08:28
文章分类

全部博文(16)

文章存档

2015年(1)

2010年(15)

我的朋友

分类: WINDOWS

2010-03-10 22:38:56

在windows下编译python模块时,有时会碰到这样的提示:
error: Python was built with Visual Studio version 7.1, and extensions need to be built with the same version of the compiler, but it isn't installed.
这是在我编译zope.interface模块是碰到的问题,记得以前自己编译pypcap时也碰到过,当时怕麻烦,就直接装了个exe版本,这次又碰到了,可是网上没有zope.interface在python25下的版本了,看来这次不能偷懒了……
我的解决方法:
1.安装MinGW,也就是安装C编译器
2.把C:\MinGW\bin添加到你的PATH的环境变量中,注意,把路径调成你的安装路径
3.在C:\Python25\Lib\distutils下新建一个名为distutils.cfg的文件,内容为:

[build]
compiler=mingw32



下面是Python的一个C扩展模块的例子:
(注意下面两个文件放到同一个文件夹内)
文件:add.c

#include<Python.h>
static PyObject* add(PyObject* self,PyObject* args);

static PyObject* add(PyObject* self,PyObject* args)
{
    int x=0;
    int y=0;
    int z=0;
    if(!PyArg_ParseTuple(args,"i|i",&x,&y))
        return NULL;
    z = x+y;
    return Py_BuildValue("i",z);
}

static PyMethodDef addMethods[]=
{

//模块内的唯一函数,函数名为add

    {"add",add,METH_VARARGS,"Execute a shell command."},
    {NULL,NULL,0,NULL}
};


//注意函数名是initdemo是不能随便改的,这是demo模块的初始化函数

PyMODINIT_FUNC initdemo()
{
    Py_InitModule("demo",addMethods);
}


文件:setup.py

#coding:utf-8

from distutils.core import setup,Extension

#扩展模块名是demo
module1 = Extension('demo',sources = ['add.c'])

setup(name='PachageName',version='1.0',\
      description='This is a demo package',ext_modules=[module1])


命令行执行命令:setup.py build

之后,如果没有错误的话,会在同一目录下生成一个名为build的目录,我的是python2.5,而且是XP下,所以build/lib.win32-2.5/demo.pyd就是生成的模块了

到这个/build/lib.win32-2.5目录下,import demo,就导入demo模块了……
阅读(3813) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~