2 meng zy meng_zy 于 2016.02.28 19:25 提问

distutils Extension TypeError

最近在学习在Python中扩展C,在 创建setup.py文件的过程中出现了问题

在终端运行“python setup.py build ”命令是出现错误,错误提示为:
[m@localhost CPython]$ python setup.py build
Traceback (most recent call last):
File "setup.py", line 4, in
extest_module = Extension(name = 'Extest', sourses = ['Extest.c'], include_dirs = ['/usr/local/include'])
TypeError: init() takes at least 3 arguments (3 given)

我的 setup.py文件内容:

 #!/usr/bin/env python
from distutils.core import setup, Extension
extest_module = Extension(name = 'Extest', sourses = ['Extest.c'], include_dirs = ['/usr/local/include'])
setup(name = 'Extest', ext_modules = [extest_module])

我的demo主文件内容

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//#include"Python.h"

static PyObject * Extest_fac(PyObject *self, PyObject *args);
static PyObject * Extest_doppel(PyObject *self, PyObject *args);
int fac(int n);
char *reverse(char *s);

static PyMethodDef ExtesMethods[] = { {"fac", Extest_fac, METH_VARARGS}, 
                                      {"doppel", Extest_doppel, METH_VARAGRS}, 
                                      {NULL, NULL} 
                                               };
void initExtest()
{
    Py_InitModule("Extest", ExtestMethods);
}

int main()
{
    int n;
    char s[] = "abcdef"; 
    //scanf("%d,&n");
    //printf("%d! == %d\n",n,fac(n));
    printf("4! == %d\n",fac(4));
    printf("reversing 'abcdef', we get '%s'\n", reverse(s));
    return 0;
}



static PyObject * Extest_fac(PyObject *self, PyObject *args){
    int res;          //parse result
    int  num;        //arg for fac()
    PyObject* retval;// return value

    res = PyArg_ParseTuple(args, "i", &num);
    if(!res) return NULL; // TypeError
    res = fac(num);
    retval = (PyObject*)Py_BuildValue("i", res);
    return retval;
}

static PyObject * Extest_doppel(PyObject *self, PyObject *args){
    char *orig_str, dupe_str;
    PyObeject *retval;
    if ( !PyArg_ParseTuple(args, "s", &orig_str)) return NULL;
    retval = (PyObject*) Py_BuildValue("ss", orig_str, dupe_str = reverse(strdup(orig_str)) );
    free(dupe_str);
    return retval;
}

int fac(int n)
{
    if (n < 2) return 1;
    return n * fac(n-1);
}

char *reverse(char *s)
{
    register char t, 
            *p = s , /* s 的头指针*/
            *q = (s + (strlen(s) - 1) ); //s的尾指针
   while (p < q)
    {
       t = *p;
       *p++ = *q;
       *q-- = t;
    }
    return  s;
}

1个回答

wangyaninglm
wangyaninglm   Ds   Rxr 2016.02.29 10:48
已采纳

没发现什么大问题,难道是路径错了么?楼主再看看路径和文件都放对这么

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Python深入:Distutils发布Python模块
Distutils可以用来在Python环境中构建和安装额外的模块。新的模块可以是纯Python的,也可以是用C/C++写的扩展模块,或者可以是Python包,包中包含了由C和Python编写的模块。   一:Distutils简介 1.1概念和术语          对于模块开发者以及需要安装模块的使用者来说,Distutils的使用都很简单,作为一个开发者,除了编写源码之外,还需要:
Distutils发布C++扩展的Python模块
Distutils的API参阅https://docs.python.org/2/distutils/apiref.html 扩展模块: 描述扩展模块由setup函数的关键字参数ext_modules实现。ext_modules是Extension实例的列表,每一个Extension实例描述了一个独立的扩展模块,扩展模块可以设置扩展包名,头文件、源文件、链接库及其路径、宏定义和编辑
用disutils建立C和C++扩展
以下为源网址翻译,翻译的不好还请见谅。 源网址:https://docs.python.org/2/extending/building.html#building 3. Building C and C++ Extensions with distutils 3. 用disutils建立C和C++扩展 Starting in Python 1.4, Python provides, on
Python的Distutils模块
Distutils包是标准Python库的一部分;主要特点有两个: (1)是让用户觉得安装新模块、包和工具的过程是简单、一致又轻松的; (2)是让开发者觉得创建这些新模块、包和工具的分发包是简单、一致又轻松的; 使用是需要写一个简单的setup.py脚本,其内容是一种相当固定的格式。可能看上去是这样的: from distutils.core import setup, Exten
py2exe-0.6.6.win32-py2.4.exe
a Python Distutils extension which converts Python scripts into executable Windows programs, able to run without requiring a Python installation.
Openstack Nova-M V2API启动与extension加载
Openstack Nova-M V2API启动与extension加载标签 Openstack在M版中,nova的v2 API默认是使用通过兼容性包装的v21 API。本文只是代码随笔,结合代码阅读时效果更佳。
win7下 scrapy的安装
学习自: http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html 我的python已经是预先安装好的2.7版本的 原文中 pywin32的网址是:从 http://sourceforge.net/projects/pywin32/ 安装 pywin32 我的2.7  32位是这个网址 https://source
Python深入:Distutils安装包
一:简介          尽管Python标准库已经支持很多的功能,但是有时还是会需要以第三方模块的形式添加新的功能到Python中。          在最简单的场景中,是你要安装的模块,已经有了针对你的平台的安装版本,因此只需要像安装其他软件一样安装他们即可。比如针对Windows用户的安装程序,针对基于RPM的Linux用户的RPM包等等。这种情况,只需要将该安装包下载下来,直接安装即
(Python编程)扩展模块的细节
Programming Python, 3rd Edition 翻译最新版本见:http://wiki.woodpecker.org.cn/moin/PP3eD22.5. Extension Module Details22.5. 扩展模块的细节Now that Ive shown you the somewhat longer story, lets fill in the rest. Th
Distutils介绍
这篇文章包含了用Python Distutils发布python模块的各个方面,主要是针对Python的开发人员。如果你想要知道怎么安装python模块,应该参考安装Python模块的章节。 1.1 专业术语 用Distutils是非常简单的,不仅对Python开发者来说,对想安装Python第三方模块的用户来说也很简单。作为一个开发人员,你的职责包括: 写个安装的脚本(通常命名为s