python作为一门强大的脚本语言,优势自然不必说,目前中低频的量化投资基本都是使用python作为researchproduction作为语言。但是,当我们的模型较复杂,运算量较大的时候,python的短板就会出现,就是运算速度慢。

当然,解决这一问题有很多方法,比如笔者先前提到的pypyjit技术,但是抛开稳定性不提,使用pypy有很多限制,而且不是那么工程化。所以,从本文开始,笔者向大家介绍Cython的一系列文章,方便将来量化或者别的应用场景中的一些重计算的部分单独取出来,然后用Cython改写,独立成模块来提高运算速度。

首先,大家都知道,C语言是编译性语言,而Python则是解释性语言,简而言之,就是Python运行是逐行运行,不需要实现编译,而C需要在运行前编译。那么,可想而知,如果运行前,需要事先编译,那么其实有一种“上帝视角”的感觉,自然可以做很多优化,让代码运行的更快。

Cython的出现就是这个目的,让Python也可以被编译,然后执行。大家要区别CpythonCythonpython大家可以认为是python的一种,其实大家平时使用的基本都是cpython。而Cython大家可以直接理解为一种语言,Cython是一种部分包含和改变C语言,以及完全包含python语言的一个语言集合。学习一段时间后大家肯定会更加理解这句话。

我们先来过一下cython编写的流程吧。

在写cython之前,我们需要一个c编译器,笔者目前使用的是win10,不知道怎么的,就是不能像以前win7一样好好玩,所以直接在linux下面编译了。如果大家是windows平台,需要先安装一个专门为python准备的编译器,笔者的版本是2.7的,链接如下:

https://www.microsoft.com/en-us/download/confirmation.aspx?id=44266

然后就是测试一下流程了。首先我们要知道,cython的文件后缀是.cyx,而且既然cythonpython语言的一个超集,那么,cyx里面运行纯python文件也是没有问题的了。

我们新建一个hello.pyx文件,在里面输入

print "Hello World"

没有任何特殊,然后我们新建一个setup.py脚本,这个python文件的目的就是使用cython编译器去编译pyx折一个cython文件。

setup文件的代码很简单:

from distutils.core import setup
from Cython.Build import cythonizesetup(ext_modules=cythonize("hello.pyx"))

然后我们运行一下setup文件,python setup.py build_ext --inplace.
build_est大概就是编译extension文件的意思,
inplace则是将.so文件放到源代码pyx旁边,也就是同一目录下的意思。

然后,我们就可以看到多了两个文件,一个是hello.c,一个是hello.so(如果你是windows,那么应该是.pyd)
这里,.c文件就是cython将我们的pyx文件解析成一个c文件件,不依赖与平台,而后面的.so或者.pyd文件,则是将.c文件进行编译后的一个文件,依赖于平台。

这个时候,.so文件或者.pyd文件就可以像普通的python文件一样,被import

当然,每次如果都要这样写个setup文件编译一下,其实挺麻烦的,还好cython给我们提供了一个很方便的解决方案。

写完hello.pyxcython代码之后,不需要编译,当我们需要使用的时候,在文件前面加上

import pyximport
pyximport.install()
import hello

然后就可以了,其实不是不用编译了,而是cython默默帮我们编译好了,放在其他地方罢了。

使用Cython将python文件打包成.so文件相关推荐

  1. Python代码打包成exe文件

    Python代码打包成exe文件:     安装pyinstaller     打包文件:cmd到文件目录下, 执行 pyinstaller -F test.py 注意:如果有调用的文件或配置文件,打 ...

  2. 把Python项目打包成exe文件

    我们很多时候,写好的程序需要打包成.exe文件才可以发给客户,那么今天我就来谈一谈,如何将一个写好的Python程序打包成exe文件! 首先,我们我们使用到的工具是python 3.7 和 Pyins ...

  3. 将Python文件打包成exe文件(超详细)

    首先,我们为什么要把Python文件打包成exe文件? 因为,Python文件需要Python IDE打开 而exe,就是一个程序,双击就开了! 岂不是妙哉? 基础准备 首先,打开终端,我们要下载打包 ...

  4. python - .py文件打包成.exe文件, 发送给别人

    python文件打包成.exe文件有两种方式 参考: pyinstaller打包 Nuitka打包 环境 环境 描述 OS Windows10 64位 python 3.7 pycharm 2019 ...

  5. 将ocx和DLL文件打包成cab文件,inf的编写

    From: http://icrwen.iteye.com/blog/1118766 http://blog.csdn.net/yimiyangguang1314/article/details/65 ...

  6. java文件打包jar文件_如何把JAVA文件打包成jar文件

    本文讲解了把java文件打包成jar文件的方法,经测试可行.由于作者没时间用批处理文件进行操作的方法没有列出来. (1)把一个java文件打包到当前目录   javac –d . *.java (2) ...

  7. ubuntu 16.04 文件打包成deb文件的方法

    ubuntu 16.04 文件打包成deb文件的方法 可使用的方法一dpkg-deb 一.创建打包空间 二.创建打包相关文件 三.制作deb包 可使用的方法一dpkg-deb 初步了解的第一种方法:创 ...

  8. 用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细)

    目录 打包前置知识 一.什么是exe可执行文件? 二.为什么要将 Python 程序打包为 exe 可执行文件? 三.为什么 Python 程序不能直接运行呢? 四.我们用什么来打包 Python 文 ...

  9. python爬虫文件打包成exe文件

    前言: 最近想把写好的爬虫文件发给朋友,由于考虑到朋友电脑里没有运行环境,下载环境安装所需要的库实在是太麻烦了,所以直接打包成exe文件发给他,这样就算没有python环境也可以双击exe文件运行.这 ...

  10. 利用cx_Freeze将py文件打包成exe文件(图文全解)

    python是一个非常非常优秀的编程语言,它最大的特性就是跨平台.python程序几乎可以在所有常见的平台中进行使用,而且大部分无需修改任何代码!不过,python也有一点点小缺憾(这个是由于自身本质 ...

最新文章

  1. internetreadfile读取数据长度为0_Hadoop 读取数据
  2. win8.1 计算机放在桌面,Win8.1怎么把开始屏幕中的程序放到桌面?
  3. SAP Fiori Elements edit按钮的实现细节
  4. 百度贴吧排名计算方式
  5. c# 数组中的空值_2.1.1 聊聊 C# 的版本及特性
  6. SqlServer行转列
  7. 原始套接字AF_PACKET用法尝试
  8. Java面向对象:对象的概念及面向对象的三个基本特征
  9. HTTP协议-HTTP权威指南
  10. CS229 Lecture 12
  11. Ext cookies设置、获取和清除
  12. 合并Windows系统镜像教程
  13. 【产业互联网周报】容联云下周纽交所挂牌;声网Agora因Clubhouse股价周内涨超30%;贝索斯将卸任亚马逊CEO...
  14. 未来5年到底是做什么生意最好?
  15. python 入门书籍-入门python有什么好的书籍推荐?
  16. 2023二建建筑施工备考第二天Day02
  17. 用netty实现zcool_Netty 系列一(核心组件和实例).
  18. JavaScript网页制作--五秒后自动跳转页面
  19. ug建模文本怎么竖着_UG编程文字加工,全方位实例讲解,文末有作业哦!
  20. Web项目实现前端锁屏功能

热门文章

  1. VMware虚拟串口的设置与使用
  2. .frm mysql_mysqlfrm使用
  3. 网络中的IP地址(包括私网地址)
  4. vue项目出现错误component lists rendered with v-for should have explicit keys
  5. linux内核源码分析之proc文件系统(三)
  6. baep matlab,matlab实验指导书全文(简化).doc
  7. java-php-python-ssm基于智能选课系统的设计与实现计算机毕业设计
  8. Dart语言中的Isolate
  9. 题解:艾米利亚的魔法
  10. mac下使用自带的bash或Cyberduck软件链接服务器