使用Cython将python文件打包成.so文件
python
作为一门强大的脚本语言,优势自然不必说,目前中低频的量化投资基本都是使用python
作为research
和production
作为语言。但是,当我们的模型较复杂,运算量较大的时候,python
的短板就会出现,就是运算速度慢。
当然,解决这一问题有很多方法,比如笔者先前提到的pypy
的jit
技术,但是抛开稳定性不提,使用pypy
有很多限制,而且不是那么工程化。所以,从本文开始,笔者向大家介绍Cython
的一系列文章,方便将来量化或者别的应用场景中的一些重计算的部分单独取出来,然后用Cython
改写,独立成模块来提高运算速度。
首先,大家都知道,C
语言是编译性语言,而Python
则是解释性语言,简而言之,就是Python
运行是逐行运行,不需要实现编译,而C
需要在运行前编译。那么,可想而知,如果运行前,需要事先编译,那么其实有一种“上帝视角”的感觉,自然可以做很多优化,让代码运行的更快。
而Cython
的出现就是这个目的,让Python
也可以被编译,然后执行。大家要区别Cpython
和Cython
,python
大家可以认为是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
,而且既然cython
是python
语言的一个超集,那么,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.pyx
的cython
代码之后,不需要编译,当我们需要使用的时候,在文件前面加上
import pyximport
pyximport.install()
import hello
然后就可以了,其实不是不用编译了,而是cython
默默帮我们编译好了,放在其他地方罢了。
使用Cython将python文件打包成.so文件相关推荐
- Python代码打包成exe文件
Python代码打包成exe文件: 安装pyinstaller 打包文件:cmd到文件目录下, 执行 pyinstaller -F test.py 注意:如果有调用的文件或配置文件,打 ...
- 把Python项目打包成exe文件
我们很多时候,写好的程序需要打包成.exe文件才可以发给客户,那么今天我就来谈一谈,如何将一个写好的Python程序打包成exe文件! 首先,我们我们使用到的工具是python 3.7 和 Pyins ...
- 将Python文件打包成exe文件(超详细)
首先,我们为什么要把Python文件打包成exe文件? 因为,Python文件需要Python IDE打开 而exe,就是一个程序,双击就开了! 岂不是妙哉? 基础准备 首先,打开终端,我们要下载打包 ...
- python - .py文件打包成.exe文件, 发送给别人
python文件打包成.exe文件有两种方式 参考: pyinstaller打包 Nuitka打包 环境 环境 描述 OS Windows10 64位 python 3.7 pycharm 2019 ...
- 将ocx和DLL文件打包成cab文件,inf的编写
From: http://icrwen.iteye.com/blog/1118766 http://blog.csdn.net/yimiyangguang1314/article/details/65 ...
- java文件打包jar文件_如何把JAVA文件打包成jar文件
本文讲解了把java文件打包成jar文件的方法,经测试可行.由于作者没时间用批处理文件进行操作的方法没有列出来. (1)把一个java文件打包到当前目录 javac –d . *.java (2) ...
- ubuntu 16.04 文件打包成deb文件的方法
ubuntu 16.04 文件打包成deb文件的方法 可使用的方法一dpkg-deb 一.创建打包空间 二.创建打包相关文件 三.制作deb包 可使用的方法一dpkg-deb 初步了解的第一种方法:创 ...
- 用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细)
目录 打包前置知识 一.什么是exe可执行文件? 二.为什么要将 Python 程序打包为 exe 可执行文件? 三.为什么 Python 程序不能直接运行呢? 四.我们用什么来打包 Python 文 ...
- python爬虫文件打包成exe文件
前言: 最近想把写好的爬虫文件发给朋友,由于考虑到朋友电脑里没有运行环境,下载环境安装所需要的库实在是太麻烦了,所以直接打包成exe文件发给他,这样就算没有python环境也可以双击exe文件运行.这 ...
- 利用cx_Freeze将py文件打包成exe文件(图文全解)
python是一个非常非常优秀的编程语言,它最大的特性就是跨平台.python程序几乎可以在所有常见的平台中进行使用,而且大部分无需修改任何代码!不过,python也有一点点小缺憾(这个是由于自身本质 ...
最新文章
- internetreadfile读取数据长度为0_Hadoop 读取数据
- win8.1 计算机放在桌面,Win8.1怎么把开始屏幕中的程序放到桌面?
- SAP Fiori Elements edit按钮的实现细节
- 百度贴吧排名计算方式
- c# 数组中的空值_2.1.1 聊聊 C# 的版本及特性
- SqlServer行转列
- 原始套接字AF_PACKET用法尝试
- Java面向对象:对象的概念及面向对象的三个基本特征
- HTTP协议-HTTP权威指南
- CS229 Lecture 12
- Ext cookies设置、获取和清除
- 合并Windows系统镜像教程
- 【产业互联网周报】容联云下周纽交所挂牌;声网Agora因Clubhouse股价周内涨超30%;贝索斯将卸任亚马逊CEO...
- 未来5年到底是做什么生意最好?
- python 入门书籍-入门python有什么好的书籍推荐?
- 2023二建建筑施工备考第二天Day02
- 用netty实现zcool_Netty 系列一(核心组件和实例).
- JavaScript网页制作--五秒后自动跳转页面
- ug建模文本怎么竖着_UG编程文字加工,全方位实例讲解,文末有作业哦!
- Web项目实现前端锁屏功能
热门文章
- VMware虚拟串口的设置与使用
- .frm mysql_mysqlfrm使用
- 网络中的IP地址(包括私网地址)
- vue项目出现错误component lists rendered with v-for should have explicit keys
- linux内核源码分析之proc文件系统(三)
- baep matlab,matlab实验指导书全文(简化).doc
- java-php-python-ssm基于智能选课系统的设计与实现计算机毕业设计
- Dart语言中的Isolate
- 题解:艾米利亚的魔法
- mac下使用自带的bash或Cyberduck软件链接服务器