目标:自定义一个C\C++矩阵类,有几个用于演示的矩阵运算函数或者操作,将其通过

PyTypeOject newType的方式注册到python中成为一种新的类型,并且要可继承。

预备知识

建议先运行python源码剖析第6章smallpython的代码,有个直观认识,再从书的第一章看起。

知乎相关type和oject的回答链接放这。

熟悉python和C\C++的混合编程。

C:

https://www.cnblogs.com/btchenguang/archive/2012/09/04/2670849.html

C++:

http://bbs.chinaunix.net/thread-1593255-1-1.html

妈卖批,会提示没有Python.h,然后又提示未定义的引用,解决方法:

先把anaconda中搜到的python2.7的头文件夹复制到/usr/include中,再使用下面的命令:

gcc -I/usr/include/python2.7 test.c -lpython2.7 -o demo

解决方法来自:https://stackoverflow.com/questions/12955086/compile-file-c-with-embedded-python-c-functions

每一个包装函数主要做三件事:
1.把输入的Python对象转换为C/C++对象;
2.调用C/C++函数;
3.转换C/C++函数处理的输出结果为Python对象,并返回;

http://www.xefan.com/categories/Python%E6%A0%8F%E7%9B%AE/

https://docs.python.org/2.7/extending/index.html

开头的目标还是暂时放一放,还是看THPP、ATen、csrc有趣。

windows下给python添加C、C++扩展编译的时候有几个坑。下面是解决方法:

Unable to find vcvarsall.bat         https://www.zhihu.com/question/26857761

我用的是 先命令行运行  SET VS90COMNTOOLS=%VS110COMNTOOLS%  ,

然后 python setup.py build的方法。

另外一个,安装了Anaconda后,代码要包括Python.h时也会提示找不到头文件。

下面这个博客解决了:

https://www.zhihu.com/question/23003213/answer/56121859

cl my_python.c -IC:\Python27\include C:\Python27\libs\python27.lib

路径替换成Anaconda中python所在路径。而且命令行要用 VS 的兼容工具命令提示

编辑时间:

1128 0119

1201 0050

1201 0150

2017年12月8日01:30:05

自定义python扩展类型的更多相关文章

  1. Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程

    [保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...

  2. Python 扩展 Op

    Python 扩展 Op 注意 :本文涉及的 Python Kernel 仅在 gcc 4.8.5 编译环境下充分测试,进一步的完善计划见 Issue 3951. 背景介绍 OneFlow 将各种对于 ...

  3. vs写python扩展资料收集

    总结: 1.创建dll工程: 2.增加包含头文件路径 :将python路径下的include加入到包含头文件路径:在工程属性页 C/C++/附加包含目新增<Python>\include目 ...

  4. MIME(多用途互联网邮件扩展类型)

    MIME对照表 百度百科 MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.(百度百科).是设定某种扩展名的文件用一种应用程序来打开的方式 ...

  5. python扩展实现方法--python与c混和编程 转自:http://www.cnblogs.com/btchenguang/archive/2012/09/04/2670849.html

    前言 需要扩展Python语言的理由: 创建Python扩展的步骤 1. 创建应用程序代码 2. 利用样板来包装代码 a. 包含python的头文件 b. 为每个模块的每一个函数增加一个型如PyObj ...

  6. python扩展实现方法--python与c混和编程

    前言 需要扩展Python语言的理由: 创建Python扩展的步骤 1. 创建应用程序代码 2. 利用样板来包装代码 a. 包含python的头文件 b. 为每个模块的每一个函数增加一个型如PyObj ...

  7. 自定义和扩展 SharePoint 2010 Server 功能区

    了解构成 SharePoint 2010 服务器功能区的组件以及如何通过演练两个功能区自定义项方案来自定义功能区. 适用范围: Microsoft SharePoint Foundation 2010 ...

  8. 使用自定义脚本扩展程序自动执行 VM 自定义任务

     在 Build 开发者大会上推出VM 扩展程序的其中一个称为"自定义脚本扩展程序",它支持 PowerShell.如果这是您第一次访问这些博客,可能需要查看以前的博客,请单击 ...

  9. iOS回顾笔记(08) -- 自定义Cell的类型和创建步骤总结

    iOS回顾笔记(08) -- 自定义Cell的类型和创建步骤总结 项目中我们常见的自定义cell主要分为两种 等高cell:如应用列表.功能列表 非等高cell:如微博列表.QQ聊天页面 下面对这 ...

随机推荐

  1. 如何从零开始在github上新建项目

    准备工作: (1)安装git: Git-2.16.1-64-bit.exe (2)新建一个文件夹grpc007,作为本地git仓库 (3)进入到grpc007目录,右键/打开git bash.使用gi ...

  2. 精析python中的装饰器、生成器

    装饰器: 在编程时,要遵循一个原则,就是开放-封闭原则. 在不破坏原函数的情况下,要想对原函数进行一些修饰,那么这里就要用到装饰器. 例如:你完成了一些用函数写成的项目,此时公司正在年度考核,你需要给 ...

  3. Starting MySQL....The server quit without updating PID file[失败]/lib/mysql/ip12189.pid). 错误一例

    [root@ip12189 etc]# service mysqld startStarting MySQL....The server quit without updating PID file[ ...

  4. fedora liveuser 切换root;su -l root

    安装完Fedora 14后,默认没有启用sudo,首先应该是对sudo进行设置.sudo的作用就是使当前非root用户在使用没有权限的命令时,直接在命令前加入sudo,在输入自己当前用户的密码就可以完 ...

  5. C# 引用类型公共变量的影响

    public int[] a =new int[2]; private void button1_Click(object sender, EventArgs e) { bing(a); } priv ...

  6. aps.net国际化本地资源 .resources”正确嵌入或链接到程序集

    asp.net国际化提供了资源文件的解决的方式, asp.net自带的两个项目文件夹 分别是:App_GlobalResources和App_LocalResources, App_GlobalRes ...

  7. hadoop day 5

    1.Zookeeper Zookeeper的安装和配置(集群模式) 1)在conf目录下创建一个配置文件zoo.cfg, tickTime=2000——心跳检测的时间间隔(ms) dataDir=/U ...

  8. emmet简单记录

    一.引式符号 html:5 or  ! . class #  id []标签内属性 pycharm不支持  {}标签的内容 pycharm不支持 ()分组标签  pycharm不支持 二.关系符号 1 ...

  9. java内部类及四种内部类的实现方式

     java内部类及四种内部类的实现方式 一.内部类定义:内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类. 二.为何要内部类?a.内部类提供了某种进入外围类的窗户.b.也是最吸引人的原因, ...

  10. 将文件夹中的图像路径自动生成txt文件(便于opencv遍历处理图像)

    代码: #include<iostream> #include<vector> #include<io.h> #include<fstream> usi ...