1.如何让python调用C和C++代码
要搞明白如何让python调用C/C++代码(也就是写python的extension),你需要征服手册中的<
在昨天花了一个小时看地头晕脑胀,仍然不知道如何写python的extension后,查阅了一些其他书籍,最终在<>书中找到了教程。1. 首先要明白的是,所谓的python扩展(也就是你提供给python的c/c++代码,不一定是c/c++代码,可以是其他语言写的代码)是一个dll,并且这个dll放在本机python安装目录下的DLLs目录下(譬如我机器上的路径是:F:/Program Files/Python25/DLLs),假如我们接下来要写的扩展module名为mb,python调用的代码为:import mbmb.showMsg("Python's really amazing, I kindda love it!")2. 搭建环境,我们要使用python提供的c头文件和lib库来进行扩展的开发。
在vs 2005下点击菜单 "工具"->"选项", 打开选项对话框,选择"项目和解决方案->VC++目录", 然后在右边"显示以下内容的目录"得comboBox上选择"包含文件”,添加python的include目录(我的机器上是"F:/Program Files/Python25/include"),然后选择库文件,添加python的libs目录(我的机器上是"F:/Program Files/Python25/libs")。既然扩展是一个dll,接下来我们要建立一个“动态链接库”工程,然后开始写代码:#include //python.h是包含python一些定义的头文件,在python的include目录下/*我的python版本是2.5, 因为安装python后它没提供debug下的lib库文件,因此你必须生成release版的dll,想要生成dll版本的,你要到python官网上自己去下载python源代码,当然你可以继续生成release版本的dll,但dll中包含调试信息*/#pragma comment(lib, "python25.lib")//先不管static PyObject* mb_showMsg(PyObject* self, PyObject *args);/*如果你的扩展是mb,那么必须实现一个initmb函数,并且从dll中导出这个函数,但我们在python中调用import mb时,python会去dll里去调用extern "C" __declspec(dllexport) void initmb(){/*当调用mb.showMsg("Python's really amazing, I kindda love it!")时, 相当于你告诉python我有一个showMsg函数,我们怎么告诉python去调用我们dll里的mb_showMsg函数呢?技巧就是下面的方式,定义一个字典数据结构,key => showMsg, value =>mb_showMsg,METH_VARARGS是函数调用方式,仔细查手册吧*/static PyMethodDef mbMethods[] = {{"showMsg", mb_showMsg, METH_VARARGS},{NULL, NULL, NULL} /*sentinel,哨兵,用来标识结束*/};//告诉python我们的模块名叫mb, 模块包含的函数都在mbMethods字典里PyObject *m = Py_InitModule("mb", mbMethods);}/*接下来实现核心功能showMsg*///第一个self参数我们用不着,具体查手册,第二个参数是python传给我们的参数,它是一个python的参数tuplestatic PyObject* mb_showMsg(PyObject* self, PyObject *args){//我们的showMsg函数需要的是一个字符串参数const char* msg = NULL;/*调用特殊参数解码python传递给我们的参数,s是string,我们传递接收参数的变量地址,如果你的功能函数需要两个参数,在PyArg_parseTuple后面继续添加接受参数的变量地址,这个函数的原型是类似printf的不定参数的形式PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, 。
);*/if (!PyArg_ParseTuple(args, "s", &msg))return NULL;//调用MBint r = ::MessageBox(NULL, "hello", "Caption:Form C module", MB_ICONINFORMATION | MB_OK);//返回值return Py_BuildValue("i", r);}将上面这段混杂着大量注释的代码拷贝到你的编辑器里,然后编译生成mb.dll,修改后缀成mb.pyd,然后拷贝到python的DLLs目录下,打开idle(python的交互程序),写入代码:import mbmb.showMsg("Python's really amazing, I kindda love it!")。
2.一个cpp文件如何调用另一个cpp文件已经定义的类
例:文件test1.cpp有类class A;文件test2.cpp有类class B.
如在test2.cpp中想用A:
#include "test1.cpp"
1. a = new A,即可用a去访问A中提供的接口
2. A *a = new A;同样达到目的
当然一般的做法是将类的声明放在.h文件里,定义放在.cpp文件,然后可以直接在B类中保存一个A类的指针,那样即可实现使用A类了。
C++,这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
它是“C Plus Plus”的简称。是继C语言之后又一种计算机编程语言,C++编程语言同时支持所有的C语言语法。C++和C相似:但C是面向过程的程序设计语言,而C++是面向对象的程序设计语言,不过C++语言保持了对C语言的兼容,也就说是在C++程序可以不用修改的插入C语言代码。
cpp是用C++语言编写的源代码文件的后缀名。它对类的强大支持可以使它编写出更优质的程序。
3.win10 codeblocks怎么配置文件
配置主题
1
首先下载主题包,
2
找到Codeblocks配置文件所在地(下面是我的配置文件所在地)。替换default.conf,当然要注意备份,注意关闭CB再执行这个操作。我的目录是:C:\Users\92303\AppData\Roaming\CodeBlocks
(AppData ,或者 Roaming请打开隐藏文件设置)
3
修改之后,我们再度打开Codeblocks,点击Setting
4
点击Editor。
5
点击Syntax highlighting -点击Color theme 修改成你想要的主题
6
修改鼠标光标颜色,Margins and Caret -> Caret 设置光标颜色
7
检查结果。
END
设置默认代码
这里以CPP为例,进入如下目录I:\CodeBlocks\share\CodeBlocks\templates\wizard\console\cpp
步骤阅读
2
打开main.cpp,修改成你想要的模板代码就可以了。
4.怎样让Python脚本与C++程序互相调用
二、Python调用C/C++1、Python调用C动态链接库 Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可。
(1)C语言文件:pycall.c[html] view plain copy /***gcc -o libpycall.so -shared -fPIC pycall.c*/ #include
(3)Python调用动态库的文件:pycall.py[html] view plain copy import ctypes ll = ctypes.cdll.LoadLibrary lib = ll("./libpycall.so") lib.foo(1, 3) print '***finish***' (4)运行结果:2、Python调用C++(类)动态链接库 需要extern "C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C++方法。不是用extern "C",构建后的动态链接库没有这些函数的符号表。
(1)C++类文件:pycallclass.cpp[html] view plain copy #include 可以用Python来写扩展,也可以用C和C++之类的编译型的语言来写扩展。Python在设计之初就考虑到要让模块的导入机制足够抽象。 抽象到让使用模块的代码无法了解到模块的具体实现细节。Python的可扩展性具有的优点:方便为语言增加新功能、具有可定制性、代码可以实现复用等。 为 Python 创建扩展需要三个主要的步骤:创建应用程序代码、利用样板来包装代码和编译与测试。(1)创建应用程序代码[html] view plain copy #include (2)用样板来包装代码 接口的代码被称为“样板”代码,它是应用程序代码与Python解释器之间进行交互所必不可少的一部分。样板主要分为4步:a、包含Python的头文件;b、为每个模块的每一个函数增加一个型如PyObject* Module_func()的包装函数;c、为每个模块增加一个型如PyMethodDef ModuleMethods[]的数组;d、增加模块初始化函数void initModule()。 最近机器出了一点问题, 之前是在网上看其步骤的,可是现在发现,那些步骤也有一些不清楚, 自己归纳的步骤觉得比较清楚: 2.安装gnuplot:另外,plotroc是调用gnuplot进行图行的绘制的.所以呢,还得装上这个程序,不过这个程序不用进行安装,在网上下载一下,解压以后,将其放在一个固定的目录下,不过建议在C盘下新建一个目录,如tmp,然后把gnuplot放在这个文件夹下面. 3.这个时候你要使用不管是easy.py,或是grid.py,或是plotroc.py还是不行的,原因是因为这些.py文件中存放有gnuplot文件的安装路径,这个时候你就应该把其路径修改成你将gnuplot所放的那个目录.而且还得注意,这三个文件的.PY文件的gnuplot路径都要改,好像easy.py与grid.py是相互联系在一块的.所以要想用它们就最好改成如我的:c:\tmp\gnuplot\pgnuplot.另外,修改这些路径时,用写字板将这些PY文件打开是最好的了. 1、用【u深度u盘启动盘制作工具】制作u盘启动盘,插入电脑usb接口,设置好开机启动项进入u深度主菜单界面,选择“【02】u深度win8pe标准版(新机器)”并回车, 2、在u深度pe装机工具中,点击“浏览”按钮选择win10系统镜像安装在c盘中,点击确定即可。 3、程序提醒执行还原操作,勾选“完成后重启”复选框,然后点击确定, 4、接着是程序还原过程,还原成功后会重启计算机,然后进行程序安装过程,请耐心等待。 5、程序安装结束就可以进行电脑常规设置了,设置完便进入win10系统桌面,等待部署结束就可以使用了。 整了一晚上加一上午。网上关于python的记录较少,这里写一下。 这里的环境是WIN10+cuda v7.5 +cudnn v4 + opencv + pycharm+VS2013 使用的是GPU,我的GPU是titan16G+内存32G 首先是caffe的文件以及第三方库的编译,这里提供一个已经编译好的的连接,我就是从那里下好然后编译完毕的。 点击打开链接 happynear的 然后就是如何编译python接口。 1、首先先生成两个python文件,在src/caffe/proto/extract_proto.bat 里生成caffe_pb2.py 这个之后有用。 2、然后打开已经给好的caffe/buildVS2013,打开里面已经有的工程文件,正常的情况下应该是有7个工程,选中pycaffee单独作为要编译的项目。如图所示: 把pycaffe作为单启动。注意需要在release x64位下编译。 如果没有这个的话,就将这个文件夹里python文件夹中的项目加入即可。如果没有python项目,就自己建一个,将python文件夹里的cpp文件加入就可以了。 3、选择pycaffe的属性,将配置属性下的VC++目录中的包含目录和库目录填上你python所在的include和libs 再在C/C++的目录下的附加包含目录一项中添加 以我的python为例。D:/python27/Lib;D:/python/include/ 以及D:/Python27/Lib/site-packages/numpy/core/include 如果你安装了CUDNN这里可以在预处理器那里把USE_CUDNN加上,同时在LINKER的输入目录下的附加依赖库中加入cudnn的lib文件。 3、开始编译即可。这里要注意一定要和caffe、caffelib在一个项目里编译,否则会报错。 4、编译成功后会在caffe/python/caffe下生成_caffe.pyd 是打不开的 5、配置python环境:需要几个额外库 Cython>=0.19.2 numpy>=1.7.1 scipy>=0.13.2 scikit-image>=0.9.3 matplotlib>=1.3.1 ipython>=3.0.0 h5py>=2.2.0 leveldb>=0.191 networkx>=1.8.1 nose>=1.3.0 pandas>=0.12.0 python-dateutil>=1.4,<2 protobuf>=2.5.0 python-gflags>=2.0 pyyaml>=3.10 Pillow>=2.3.0 six>=1.1.0 其中numpy要装MKL版本的,不然scipy装上了BLAS不能用 leveldb没有windows版本的,不过我找到了可以使用的办法。见这个博客: 点击打开链接 如果有pip install 装不上的,可以上这个网站找 wheel文件安装就可以了 点击打开链接 6、最后把目录中python下的caffe文件夹复制到python27/Lib/site-packages就可以了。 测试的时候只需要在控制台下输入import caffe 看能载入就知道成功了:) 转载请注明出处windows之家 » win10py文件如何调用cpp文件5.py文件如何使用
6.如何在深度技术Win10企业版系统下运行py文件
7.win10caffe安装后怎么使用