extension-distutils Extension TypeError

问题描述

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! == %dn",n,fac(n));
    printf("4! == %dn",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;
}

解决方案

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

时间: 2025-01-19 17:35:17

extension-distutils Extension TypeError的相关文章

App Extensions篇之Share Extension

转载请注明出处:https://yq.aliyun.com/articles/117808?spm=5176.blogshare117808.0.0.9Vjqbx 1.前言 这里主要是对App Extension的一些介绍以及详细给大家介绍一下Share Extension,后期会添加其他的Extension介绍. 2.开始 主要对App Extension和Share Extension进行介绍.请继续往下看: 2.1: App Extension的介绍  官方给的说法是:App Extens

PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法_php技巧

本文实例讲述了PHP提示 Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法,在PHP程序开发中常会遇到这类问题.分享给大家供大家参考,具体的解决方法如下: 将下面代码改为mysqli或PDO即可. function connectit () { global $CFG; mysql_connect($CFG['db_host'], $CFG['db_user'], $CFG['db_pass']) or die

【原创】Tribler开发--BG Process的编译

遵照 http://www.tribler.org/trac/wiki/BrowserPlugin 中对SwarmPlugin的说明,首先需要编译出BG Process这个东东. 下载源码 svn co http://svn.tribler.org/abc/branches/mainbranch/,将源码放到你自己指定路径后执行  ? 1 2 3 4 5 C:\Python27>python.exe Tribler\Plugin\Build\Win32\setupBGexe.py py2exe

加速你的Python代码

在我看来,python社区分为了三个流派,分别是python 2.x组织,3.x组织和PyPy组织.这个分类基本上可以归根于类库的兼容性和速度.这篇文章将聚焦于一些通用代码的优化技巧以及编译成C后性能的显著提升,当然我也会给出三大主要python流派运行时间.我的目的不是为了证明一个比另一个强,只是为了让你知道如何在不同的环境下使用这些具体例子作比较. 使用生成器 一个普遍被忽略的内存优化是生成器的使用.生成器让我们创建一个函数一次只返回一条记录,而不是一次返回所有的记录,如果你正在使用pyth

c/c++扩展python实例学习教程

用python脚本写应用比较方便,本文我们将学习用c/c++python扩展的实例. 说明: 测试环境中操作系统为CentOS6.5_x64,python版本为2.6 直接调用动态库 1.编写模块动态库文代码 这里以求最大数为示例 代码(callTest1.cpp)如下: extern "C"{    int Max(int i1,int i2)    {        return (i1>i2)?i1:i2;    }}   在bash中执行以下命令: g++ -fPIC -

Python 代码性能优化技巧分享_python

如何进行 Python 性能优化,是本文探讨的主要问题.本文会涉及常见的代码优化方法,性能优化工具的使用以及如何诊断代码的性能瓶颈等内容,希望可以给 Python 开发人员一定的参考. Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率. 改进算法,选择合适的数据结构 一个

使用Pyrex来扩展和加速Python程序的教程_python

 Pyrex 是一种专门设计用来编写 Python 扩展模块的语言.根据 Pyrex Web 站点的介绍,"它被设计用来在友好易用的高级 Python 世界和凌乱的低级 C 世界之间搭建一个桥梁."虽然几乎所有的 Python 代码都可以作为有效的 Pyrex 代码使用,但是您可以在 Pyrex 代码中添加可选的静态类型声明,从而使得这些声明过的对象以 C 语言的速度运行.加速 Python 从某种意义上来说,Pyrex 只是不断发展的 Python 类语言系列的一个部分:Jython

Python实现代码行数自动统计实例

此功能用到了2个常用的Python标准库os和sys模块就解决. 可能是因为这段时间在做的一个Python项目,用的是一个公司内部的IDE环境,而这个IDE环境产生的py代码并不是以文本方式存储,都是放在二进制文件里面的. 由于这门语言外界几乎接触不到,所以没有针对它的代码统计程序.一个模块完成后要统计代码行数会很困难的,要统计的话只能手工来操作,这不符合我们程序员的一惯风格. 在这期间我一直在关注python语言,但是还没有动手真正的写python程序 .今天就利用中午休息的时间写了一个简单的

Python 性能诊断及代码优化技巧

    程序代码的优化通常包含:减小代码的体积,提高代码的运行效率.这样可以让程序运行得更快.下面我们来具体谈谈 Python 代码优化常见技巧. 改进算法,选择合适的数据结构 一个良好的算法能够对性能起到关键作用,因此性能改进的首要点是对算法的改进.在算法的时间复杂度排序上依次是: O(1) -> O(lg n) -> O(n lg n) -> O(n^2) -> O(n^3) -> O(n^k) -> O(k^n) -> O(n!) 因此如果能够在时间复杂度上