4 个快速的 Python 编译器
简评:Python 和其他的解释型语言一样经常被吐槽性能不行,所以开发人员为了提升性能创建了不少编译器,本文则选取其中的四个做了基准测试。
Python 其实是一种相当快的语言,但它并不像编译型语言那么快。 这是因为官方实现的 CPython 解释执行的,更准确地说,是 Python 代码被编译为字节码,然后进行解释。这对学习是很有好处的,因为可以在 Python REPL 中运行代码并立即查看结果,而不必编译和执行。 但是由于 Python 程序并没有那么快,开发人员多年来创建了几个 Python 的编译器,包括 IronPython 和 Jython。
快速的性能并不是编译的唯一原因,可能诸如 Python 之类的脚本语言最大的缺点是你需要隐式地向客户提供源代码。
我想比较同一平台上的一些 Python 编译器,特别是那些支持 Python 3.x 的编译器。最后,我选择了四个,都在 Ubuntu Linux上运行,他们是 Nuitka,PyPy,Cython 和 cx_Freeze。
比较 Python 编译器
有人已经完成了创建 Python 基准测试的工作。我选择了 PyStone,这是 Python 的创建者Guido van Rossum 对 C 程序的翻译(而 C 程序本身是 Ada 程序的翻译)。 我在 GitHub 上找到了开发人员 Christopher Arndt 的转换版本,它能够兼容 Python 3。 下面是 Pystone 的CPython(即标准 Python)性能:
Python 2.7.15Rc1 2 : 272,647 pystones/second.
Python 3.6.5 : 175,817
正如你所看到的,Python 2 和 Python 3 之间有很大的区别(每秒 Pystones 越多越好)。在下面的细分中,所有的 Python 编译器都针对 Python 3 进行基准测试。
Nuitka
尽管可以按照下载页面上的说明操作,但 Ubuntu 上的只需:
$ sudo apt install Nuitka
Nuitka 还需要一个 C 编译器,所以我下载了 clang。可以使用以下方法安装它:
$ sudo apt install clang
Nuitka 默认使用 gcc,但是一个参数允许你使用 clang,所以我用两者测试了它。 clang 编译器是 llvm 系列的一部分,旨在作为 gcc 的现代替代品。使用 gcc 编译 pystone.py 就像这个(第一行)一样简单,或者使用 clang(第二行),并使用链接时间优化 gcc(第三行):
$ nuitka pystone.py
$ nuitka pystone.py --clang
$ nuitka pystone.py --lto
编译(大约 10 秒钟)完成后,我从终端运行了 pystone:
$ ./pystone.exe 500000
结果是
Size Execution pystones/sec
1. 223.176 Kb 597,000
2. 195,424 Kb 610,000
3. 194.2 kb 600,000
这些是 5 次运行的平均值,我尽可能多地关闭了进程。
PyPy
Guido van Rossum 曾经说过:「如果你希望你的代码运行得更快,你应该只使用PyPy。」我将编译好的二进制文件下载到一个文件夹中,并将 pystone.py 复制到其下的 bin 文件夹中。然后我像这样运行:
$ ./pypy3.5 pystone.py
结果是惊人的 1,776,001 pystones/sec,几乎是 Nuitka 的三倍。
PyPy 使用即时编译器并做了一些非常巧妙的东西来实现它的速度。根据基准测试的报告,它平均比 CPython 快 7.6 倍。 我很容易相信。 唯一(轻微)的缺点是它总是落后于 Python 版本。
生成一个 EXE 需要一些工作,你必须将你的 Python 编写成一个名为 RPython 的子集。
Cython
Cython 不仅仅是 Python 的编译器,它是 Python 的超集,支持与 C / C++ 的互操作性。 CPython是用 C 编写的,所以它是一种通常可以很好地与 Python 混编的语言。
使用 Cython 进行设置有点繁琐,它不像 Nuitka 那样开箱即用。首先,必须从扩展名为 .pyx的 Python 文件开始,你运行 Cython 来创建一个 pystone.c 文件:
$ cython pystone.pyx --embed
不要忽略 –embed 参数,接下来,你用这条命令编译 pystone.c:
$ gcc $(python3-config --includes) pystone.c -lpython3.6m -o pystone.exe
如果遇到任何错误,例如「找不到 -lpython 版本」,则可能是因为你的 Python 版本。要查看安装的版本,请运行以下命令:
$ pkg-config --cflags python3
毕竟,Cython 只给出 228,527 pystones/sec,但是,Cython 需要你做一些指定变量类型的工作。Python 是一种动态语言,因此没有指定类型, Cython 使用静态编译,使用 C 类型变量可以产生更好的优化代码。 (文档相当广泛,需要阅读。)
Size Execution pystones/sec
1. 219,552 Kb 228,527
cx_freeze
这是一套用于将 Python 脚本「冻结」为可执行文件的脚本和模块,可以在GitHub上找到。我安装了它并创建了一个冻结文件夹来管理内容:
$ sudo pip3 install cx_Freeze --upgrade
我在安装脚本中发现的一个问题是缺少“lz”的错误。你需要安装 zlib 运行它来安装它:
$ sudo apt install zlib1g-dev
之后,cx_Freeze 命令使用 pystone.py 脚本创建了一个 dist 文件夹,其中包含一个 lib 文件夹,一个 5MB 的 lib 文件和 pystone 应用程序文件:
$ cxfreeze pystone.py --target-dir dist
Size Execution pystones/sec
1. 10,216 174,822
不是最快的性能,因为它与 CPython 的速度相同。 (Python 冻结包括将应用程序与所需的Python 元素一起放在单个文件(或文件夹)中,而不是编译,这意味着目标不需要Python。)
结论
我对 PyPy 的表现感到敬畏,编译非常快,在按下回车键后不到一秒就产生了结果。 如果你想要一个 exe,我推荐 Nuitka,这是一个不费吹灰之力的编译,运行速度比 CPython 快。你也可以自己试用这些 Python 编译器,看看哪种方法最适合特定需求。
4 个快速的 Python 编译器相关推荐
- gcc 编译python_4 个快速的 Python 编译器 for 2018
简评:Python 和其他的解释型语言一样经常被吐槽性能不行,所以开发人员为了提升性能创建了不少编译器,本文则选取其中的四个做了基准测试. Python 其实是一种相当快的语言,但它并不像编译型语言那 ...
- python编译软件排行榜_4 个快速的 Python 编译器 for 2018
简评:Python 和其他的解释型语言一样经常被吐槽性能不行,所以开发人员为了提升性能创建了不少编译器,本文则选取其中的四个做了基准测试. Python 其实是一种相当快的语言,但它并不像编译型语言那 ...
- python实现即时编译器_4 个快速的 Python 编译器 for 2018
简评:Python 和其他的解释型语言一样经常被吐槽性能不行,所以开发人员为了提升性能创建了不少编译器,本文则选取其中的四个做了基准测试. Python 其实是一种相当快的语言,但它并不像编译型语言那 ...
- inno setup打包的安装包如何在卸载完程序后可以继续安装_这两个方法就够了!快速制作Python程序Windows安装包...
点击关注州的先生 编程应用.实战教程,不容错过 /00/ 前言 我们使用Python可以编写很多提高工作和学习效率的小工具,在编写完之后,如果我们想将其分享给更多的人使用,那么最便捷的方法就是将其打包 ...
- 【python零基础入门学习】Python入门,带你快速学习Python 基础语法
ython 语言与 Perl,C 和 Java 等语言有许多相似之处.但是,也存在一些差异. 在本章中我们将来学习 Python 的基础语法,让你快速学会 Python 编程. 第一个 Python ...
- python编辑器安卓手机版_python编译器安卓下载-python编译器手机版下载v1.8.0 安卓版-2265安卓网...
python编译器手机版是一款超棒的编程工具.专业的编程内容设计,多种多样的语言选择,完美的脚本,强大的功能,没有任何广告,快速的编写,还有快速提示,自由复制等等! python编译器安卓软件介绍 - ...
- python编写游戏加速器_Numba:用CUDA加速的高性能Python编译器
[IT168 编译]Python是一种高效的动态编程语言,广泛应用于科学.工程和数据分析应用领域.使python如此受欢迎的因素有很多,包括其干净的.表达性的语法和标准的数据结构,综合的"内 ...
- matlab调用python编译器_Matlab转python编译器-Matlab/Octave转Python编译器(smop) 0.2.5 免费版 - 河东下载站...
Matlab转python编译器是一款功能相当强大的转换编译器:它主要就是为了帮助用户将Matlab.Octave快速的转换成为您需要的Python,非常的适合这科学的计算过程中,matlab代码进行 ...
- 【pipenv】 快速入门,超全面的pipenv教程!(教你如何快速创建python虚拟环境!)
文章目录 一.pipenv的快速入门 0.快速上手 1.安装 2.卸载 3.跟新包 4.首次运行 5.删除虚拟环境 6.与虚拟环境相关的常用命令 (0)展示环境中已安装的包 (1)包的安装 (2)包的 ...
最新文章
- Swift中NSRange和Range的转换
- Grafana中整个Dashboard报错问题解决
- delphi7升级delphi2007可以互用马_奶爸带娃玩“升级版摇摇马”火了,像极了传说中的“甘为孺子牛”...
- 总结 | 计算机视觉领域最常见几中损失函数
- Web前端技巧分享:教你用GD库生成验证码
- 这个宝藏工具,会给你一种黑客般的感觉
- ls命令查看文件和目录列表
- postman压力测试_如何用Postman简单做接口自动化
- 【数据分析师---数据可视化】第二章:plotly绘图进阶篇(地图可视化,动态数据可视化)
- html怎样让页面居中显示,HTML怎么让页面居中
- 传智播客黑马程序员Java学习笔记(一)
- RFC2544优化步长测试——信而泰网络测试仪实操
- python3 使用writerows写入csv时有多余空行的处理办法
- 如何突破思维局限去思考世界,去读读以下三个理论
- 【坑】html5中使用context.lineWidth设置线的宽度是1,然而输出的宽度是2的原因
- 3D~RPG游戏的制作
- 看共享单车上的智能车锁有何区别
- Springboot Swagger2 Unable to infer base url问题解决
- C语言-求一元二次方程的解-你是否会了呢?
- 什么是VHDL?一文带你了解VHDL语言
热门文章
- 誉天就业招聘:云计算/数通运维工程师
- 深度学习基础23(数据偏移what,how,why)
- Linux vim与vi 的使用详细
- DaVinci Resolve Studio 18 for mac(达芬奇剪辑软件)
- SaaS应用选型,必须考虑的10个安全问题
- Java 利用http协议与Domino实现sso单点登录
- Python爬虫笔记——HTML基础认识
- 【头歌】 标准ACL配置
- Pr_cc 学习笔记(四)历史纪录-工作区-调板-撤销-蓝布棉门帘
- 使用U盘安装统信UOS20服务器操作系统1050a出现“设置基础软件仓库时出错”报错导致无法继续安装的解决方法