怎么写python扩展

1.python扩展的c代码在哪里写

在哪里写都可以啊,重要的是编译过程。

给你介绍下编译过程吧。在windows和linux下面,对C扩展的编译方法是不一样的,我们先来看windows版的。

我们用C实现一个简单的加法。首先新建一个文件add.c,代码如下:#include ; static PyObject* add(PyObject *self, PyObject *args); //一定声明为static,把他们限制在这个文件范围里。

几乎所有的参数都是PyObject类型,在python,每个东西都是object。 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; /*第一个参数是self,这个是python用的, 每个函数都要有。

我们暂时不管。args是一个参数列表。

她把所有的参数都整合成一个string。所以 我们需要从这个string里来解析我们的参数。

PyArg_ParseTuple来完成这个任务。第一个参数是args, 就是我们要转换的参数。

第二个是格式符号。 “s”代表是个string。

从args里提取一个参数就写"s", 两个的话就写"s|s", 如果是一个string,一个int,就写"s|i", 和printf差不多。第三个 参数就是提取出来的参数放置的真正位置。

必须传递这个参数的地址。对于add, 他将提取两个参数。

分别是x和y。*/ z=x+y; return Py_BuildValue("i", z); /*调用完之后我们需要返回结果。

这个结果是c的type或者是我们自己定义的类型。必须把他转换成PyObject, 让python认识。

这个用Py_BuildValue 来完成。他是PyArg_ParseTuple的逆过程。

他的第一个参数和PyArg_ParseTuple的第二个参数一样, 是个格式化符号。第三个参数 是我们需要转换的参数。

Py_BuildValue会把所有的返回只组装成一个tutple给python。*/ } static PyMethodDef addMethods[] = { {"add", add, METH_VARARGS, "Execute a shell command."}, {NULL, NULL, 0, NULL} }; /*这个是一个c的结构。

他来完成一个映射。 我们需要把我们扩展的函数都映射到这个表里。

表的第一个字段是python真正认识的。是python 里的方法名字。

第二个字段是python里的这个方法名字的具体实现的函数名。 在python里调用add, 真正执行的是用c写的add函数。

第三个字段是METH_VARARGS, 他告诉python,add是调用c函数来实现的。第四个字段是这个函数的说明。

如果你在python里来help这个函数,将显示这个说明。相当于在python里的函数的文档说明。

*/ PyMODINIT_FUNC initadd() { Py_InitModule("add", addMethods); } /*注意,这个函数的名字不能改动。 必须是init+模块名字。

我们的模块名字是add。所以这个函数是initadd()。

这样python在导入add 的模块时候,才会找到这个函数,并调用。这个函数调用Py_InitModule来将模块名字和映射表结合在一起。

他表示,add这个模块使用addMethods这个映射表。python应该这样导入我们的module的.*/新建一个setup.py,内容如下:from distutils.core import setup, Extension module1 = Extension('add', sources = ['add.c']) setup (name = 'PackageName', version = '1.0', description = 'This is a demo package', ext_modules= [module1])组建:(由于我的机器上装了mingw,所以指定了mingw32。

默认的编译器是vs2008。参考:python setup.py build --compiler=mingw32 执行后会在当前目录生成一个build目录及文件:build\lib.win32-2.6\add.pyd 将add.pyd拷贝到当前目录,并写一个测试文件test.py,代码如下:import add print add.add(3,4) 执行一下,输出为7 OK,基本上就是如此了。

在linux下的话,会有少许不同.即直接用makefile将add.c编译成.so,python可以直接import,makefile代码如下:PYLIB = /usr/bin PYINC = /usr/include/python2.6 all: add.c gcc add.c -g -I$(PYINC) -shared -L$(PYLIB) -lpython2.6 -o add.so clean: rm -f add.so用同样的测试代码,可以测试通过。

2.python怎么作为c语言的扩展

Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。

Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议[1] 。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。

Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中[2] 有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

在python中扩展c语言模块可以总结为以下几步:1.首先,编写包含py接口的c源文件,称为wrap.c。这一步可以使用swig带过。

例如:swig -python foo.i2.接着,对wrap.c进行编译,生成XX.so。这一步可以使用 distutils带过。

如果要用 distutils的话,则需要首先编写一个py脚本。示例:setup(name = 'example', version = '1.0', ext_modules = [Extension('example', ['wrap.c','example.c'])]) 注意:句子中的list不仅不要包含wrap源文件,还要包含函数的原始源文件3.上一步的so文件便是最终可以使用的库文件,把该文件放入py的lib中或者当前目录,即可导入c语言扩展模块进行使用。

如果之前用过swig,还要把相应的so文件移入模块文件夹中并在文件名前加上_。示例: cp printf.so /usr/lib64/python2.7/site-packages/_printf.so。

3.怎样用python编写一个可扩展更新的exe程序

1. 手动制作python的exe可执行程序Python没有内建一个编译为exe的功能。给python程序的部署带来不少的麻烦。所以就会出现一些py2exe之类的很不错的工具,用于自动把.py文件编译为.exe文件。

最近抽空研究了一下手动实现类似py2exe的功能,希望加强对python的了解。结果还相当不错。把结果记录下来,与大家共享。

1.1. 原理文中所描述的方法,基于python的以下几个功能

1) python程序运行时,会在sys.path指定的路径中查找库文件。

2) python从2.3开始,支持从zip文件中import库(支持.py,.pyc和.pyo,但不支持.pyd)

3) python提供C API,让c语言的程序,可以很方便的调用python的程序

1.2. 实际步骤注:假设python安装在c:\python25目录中,最后的可执行文件放到d:\dist目录中

1) 先去c:\python25\Lib目录,把所有文件都复制出来,比如复制到d:\pythonlib目录中

4.Python的C语言扩展

C-Python,或者CPython,指C实现的Python虚拟机的基础API。最通用的Python就是是基于C实现的,它的底层API称为C-Python API,所有Python代码的最终变成这些API以及数据结构的调用,才有了Python世界的精彩。

Cython,准确说Cython是单独的一门语言,专门用来写在Python里面import用的扩展库。实际上Cython的语法基本上跟Python一致,而Cython有专门的“编译器”先将 Cython代码转变成C(自动加入了一大堆的C-Python API),然后使用C编译器编译出最终的Python可调用的模块。

GIL:Global Interpreter Lock,是Python虚拟机的多线程机制的核心机制,翻译为:全局解释器锁。其实Python线程是操作系统级别的线程,在不同平台有不同的底层实现(如win下就用win32_thread, posix下就用pthread等),Python解释器为了使所有对象的操作是线程安全的,使用了一个全局锁(GIL)来同步所有的线程,所以造成“一个时刻只有一个Python线程运行”的伪线程假象。GIL是个颗粒度很大的锁,它的实现跟性能问题多年来也引起过争议,但到今天它还是经受起了考验,即使它让Python在多核平台下CPU得不到最大发挥。

5.怎么添加自已写的python脚本

一种方法是直接放在项目里,但这样是不能做到公用的。你每新建一个项目,都要把代码放进去。

推荐下面的方法:

1、将公用的文件放在一起

如~/python/common

模块utils.py,放在这里:~/python/common/utils.py

2、在你的新项目里这样包含它:

import utils

3、在运行你的脚本前,要加环境变量才可以,否则找不到包的位置:

export PYTHONPATH=~/python/common

这个环境变量也可以写在/etc/profile里,避免每次都export

还有一种方法,就是使用setuptools制作安装包。第三方的包都是采用这种方式。但对于正在开发和调试的库,会比较不方便。

希望能帮到你!

6.学会python语法之后怎么写

python程序员学习路线图 python+ 数据结构和算法 + linux + 软件工程 + web开发 + git版本控制+ 沟通技巧等等。

Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。

Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议。

Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。

Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

怎么写python扩展

转载请注明出处育才学习网 » 怎么写python扩展

知识

怎么写漂亮数字1到10

阅读(2104)

本文主要为您介绍怎么写漂亮数字1到10,内容包括数字1到10怎么写才好看要字体,110的各种写法,大写数字一到十怎么写大写数字一到十写法及填写规范。110的各种写法如下:数字:2、3、4、5、6、7、8、9、10。汉语:二、三、四、五、六、七、八、九、

知识

桃花妖日语怎么写

阅读(225)

本文主要为您介绍桃花妖日语怎么写,内容包括桃花妖日文怎么写,桃花用日语怎么说,”桃花“用日语怎么说。さくらようせい桜日[さくら][sakura]◎【名词】 (1)樱花,樱花树。(バラ科サクラ属の落叶高木または低木)。桜が咲いた。/樱花

知识

菊花怎么写才好看

阅读(241)

本文主要为您介绍菊花怎么写才好看,内容包括描写菊花美丽样子的句子,怎么写只有300字的美丽的菊花的作文,作文里菊花整体的美怎么写。菊花的花瓣虽然不是很大,但是很多,给人一种团结的感觉。那么多片花瓣紧紧地抱在一起,共同抵御秋天的寒冷。

知识

龙pao字怎么写

阅读(177)

本文主要为您介绍龙pao字怎么写,内容包括龙的连笔字咋写,龙字大写怎么写,Pao字怎么写,是一种可吃的植物果实。龙

知识

竣工资料验收报告怎么写

阅读(247)

本文主要为您介绍竣工资料验收报告怎么写,内容包括工程竣工验收申请报告竣工资料内容怎么写,竣工验收报告怎么写,建设工程竣工验收报告怎么填。根据《中华人民共和国》(建设部)(房屋建筑工程和市政基础设施工程竣工验收暂行规定)工程竣工验收应

知识

德国宝马总结怎么写

阅读(229)

本文主要为您介绍德国宝马总结怎么写,内容包括给我德国宝马的详细资料,工作总结宝马已完成吹牛没有,德国宝马公司简介。BMW,全称为巴伐利亚机械制造厂股份公司(德文:Bayerische Motoren Werke AG),是德国一家世界知名的高档汽车和

知识

大写字母p的笔顺怎么写

阅读(337)

本文主要为您介绍大写字母p的笔顺怎么写,内容包括p的笔画顺序怎么写,大写字母的笔画顺序怎么写,大写字母的笔画顺序怎么写。“p”的笔画顺序是先写一竖,再写右上饱满半圆。

知识

奥迪定速巡航怎么用

阅读(246)

本文主要为您介绍奥迪定速巡航怎么用,内容包括奥迪a6l定速巡航怎么用,奥迪车如何使用定速巡航功能,奥迪A6如何使用定速巡航。A6L的定速巡航开关是拨杆式的,操作方法:往后推是取消和关闭,往前拉是开启和恢复,往上提是提高车速设定值,往下按是降低

知识

吸痰器怎么用

阅读(196)

本文主要为您介绍吸痰器怎么用,内容包括手动吸痰器家用的怎么用要注意什么,吸痰器的正确使用方法,吸痰器的使用方法。使用方法:安装好吸痰器和排痰管(吸痰管接头在唧筒中央,排痰管接头在一侧,切勿颠倒)。

知识

捡的手机怎么用最安全

阅读(219)

本文主要为您介绍捡的手机怎么用最安全,内容包括捡到一个手机之后怎么样处理之后可以安全使用,捡的手机怎么用安全,捡的手机怎么用安全。你可以先刷机,把原来的内容都刷掉再用1. 打开你的手机的USB调试模式,拿数据线连接电脑;2. 在电脑端打开

知识

p.m怎么写

阅读(234)

本文主要为您介绍p.m怎么写,内容包括拼音b,P,m按格式怎么写,pm中文怎么写,英语中的p.m.是大写还是小写的。如下图:书写规范:(1)占中间格的拼音:(2)占3格的拼音:(3)占下2格的拼音:(4)占上2格的拼音:扩展资料韵母组成:韵母=韵头(介

知识

pop字体辽字怎么写

阅读(325)

本文主要为您介绍pop字体辽字怎么写,内容包括pop字体入门怎么写好,海报POP字体怎么写,怎么写pop字体。用铜版纸画5*5厘米的方格,选用黑色6mm记号笔练习,最好找一本高手的字帖临摹请把握以下技巧:)【pop字体特点】 ­字体活泼,结构方正

知识

qe年终总结该怎么写

阅读(210)

本文主要为您介绍qe年终总结该怎么写,内容包括品质部QE工程师年终总结要怎么写急,我想找一份QE年终工作总结及年度计划,QA年终总结怎么写。年 终 总 结 转眼间2007已将成为过去,在这一年里都作了些什么呢?苦苦的寻思; 在一个五金生产的企业已

知识

餐厅服务员简历怎么写

阅读(243)

本文主要为您介绍餐厅服务员简历怎么写,内容包括餐厅服务员的简历怎么写,餐厅服务员简历都需要填什么急求,应聘餐饮服务员该怎么写简历啊。原发布者:于秀兰服务员个人简历范文服务员个人简历范文(1)姓名:xxx性别:女婚姻状况:未籍贯:四川民族:汉身高

知识

python怎么写模块

阅读(191)

本文主要为您介绍python怎么写模块,内容包括python中怎么import自己写的模块,python中怎么import自己写的模块,python怎么安装自己写的模块。昨天面试空管局的时候遇到了这个问题。当时回答的不是很理想。现在整理一下。Python学习手册中写

知识

怎么用python写一个漏洞扫描器

阅读(192)

本文主要为您介绍怎么用python写一个漏洞扫描器,内容包括如何用python编写一个高效的多线程端口扫描器,如何用python调用nmap扫描漏洞,如何用python写端口扫描工具。如果你的Web应用中存在Python代码注入漏洞的话,攻击者就可以利用你的Web应

知识

pythonelse中的空语句怎么写

阅读(250)

本文主要为您介绍pythonelse中的空语句怎么写,内容包括python编程for循环中ifelse怎么写,pythonif语句如何书写,pythonif语句怎么写。Python中用于多个选择, else if 用 elif表示。例如:>>> x = 3>>> if x<1:print " x is

知识

扩展日志式英文怎么写

阅读(281)

本文主要为您介绍扩展日志式英文怎么写,内容包括详细日志的英文怎么写,“扩展器”的英文怎么说,macos扩展日志式,属于什么格式,win下怎么读写。Hum~~~Its late at mid-night and i cant fall asleep.Er..At the moment

知识

python怎么写注释

阅读(325)

本文主要为您介绍python怎么写注释,内容包括Python如何进行中文注释,Python程序的注释语句怎么写,Python单行注释和多行注释怎么写,需要注意什么。#在Python中显示中文注释和输出中文a ="中文"print ad:\Python27\python.exe "D:\test\中

知识

怎么用python写网页

阅读(249)

本文主要为您介绍怎么用python写网页,内容包括如何用python来写网页,如何用python来写网页,怎样用Python写一个Html的简单网页。我安装好了apache2.2。然后安装mod_python,并安装mod_python的说明配置好httd.conf的文件,但是启动ap

知识

ubuntu怎么写python

阅读(204)

本文主要为您介绍ubuntu怎么写python,内容包括ubuntu下怎么编写python程序,在Ubuntu下如何编写Python程序,ubuntu下写python程序用什么软件。哥,你这个问题问的太有水平了。第一,你首先要学习Python语言,学好了在任何平台下都可以编程。这个概

知识

python怎么写winform

阅读(473)

本文主要为您介绍python怎么写winform,内容包括请问,我有一个python写的.py脚本,想通过一个winform上的一个按钮,Python写界面简单吗,和c#比如何,c#winform程序中调用一个用python编写的exe程序,然后我想执行上边。python是很简单,易学的编

[/e:loop]