python编译软件排行榜_4 个快速的 Python 编译器 for 2018
简评: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 编译器,看看哪种方法最适合特定需求。
python编译软件排行榜_4 个快速的 Python 编译器 for 2018相关推荐
- python都有什么包_常用的Python包有哪些,如何快速掌握Python编程
Python入门简单.功能强大,是很多想要入行IT开发行业人士的主要选择.Python包可以帮助Web开发人员快速和容易地创建应用程序和功能,因此很多企业在招聘时都会考察求职者对于Python包的掌握 ...
- 可视化Python编译软件:GUI2Exe
一般在Python下的编译软件用的是py2exe,可能对初学者来说,命令行的方式不如图形界面来的直观,幸运的是老外写了一个集成了多个py编译软件的图形界面,操作相当方便. 这里我简单写了下使用过的方法 ...
- python实现即时编译器_4 个快速的 Python 编译器 for 2018
简评:Python 和其他的解释型语言一样经常被吐槽性能不行,所以开发人员为了提升性能创建了不少编译器,本文则选取其中的四个做了基准测试. Python 其实是一种相当快的语言,但它并不像编译型语言那 ...
- python编程软件排行榜_Python编程开发工具:这10个对Web开发者最有用的Python包
Python编程一时间成为了开发人员最喜欢的语言之一.无论是专业的,业余的,还是作为一个Python初学者,都可以从Python编程语言及其程序包中受益.Python已经被证明是当今最具活力的面向对象 ...
- python编译软件和编译环境选择(Windows下,新手看)
想要使用python进行编程,一般有以下的开发环境 1,python官网下载的python包中自带的IDLE 2,pycharm 3, 下载anaconda自带的spider 第1种的开发环境非常简 ...
- 学习分享 | 通过C++,python的对比,帮你快速入门python
一.前言 对于只接触过静态语言,而从未使用过动态语言的人来说,第一次看到python的语法可能会大为惊叹.不用申明变量类型?不用等老半天编译完成就能直接运行?不用小心的维护指针?还不用写CMakeli ...
- 十大python开发软件-必看 | 2020年,Python十大应用领域介绍!
原标题:必看 | 2020年,Python十大应用领域介绍! python作为一门当下极其火爆的编程语言,得到世界范围内无数编程爱好者和开发者喜欢并不是偶然的,除了要比其他编程语言更容易入门,pyth ...
- python入门要多久-初学者如何快速上手python入门要多久
今天跟大家讨论一下对于一个新手如何快速入门python. python是一种非常接近人类语言的解释性高级语言,如果你学过java,应该知道解释性语言区别于编译性语言.python作为一种高级语言,功能 ...
- 0基础学python做什么工作好-如何快速学习Python编程?可以做什么职业?
近些年Python热度不减,一直占据编程语言排行榜的前几位.人生苦短,让我们来学一学Pyhotn吧,找到一份满意的工作还是没有问题的. Python语言本身所具有的优势,决定了从事Python学习的开 ...
最新文章
- python 之路200行Python代码写了个打飞机游戏
- 图像分割 c语言程序,OpenCV实现图像切割功能
- 基于ECLIPSE的C++环境配置。。
- nacos oaut服务地址_spring-boot+nacos+spring-oauth2整合方案
- Debian7 apt源设置
- c语言不会可以学好java吗_不会C语言能学Java吗
- 分支和循环结构的应用(习题)
- LeetCode--20. 有效的括号(栈,删除法)
- 今天看到了和我男朋友不一样的程序员!好帅哦!
- Matlab Tricks(六)—— 矩阵乘法的实现
- Win8下用DOSBox编写汇编语言
- bind 绑定标签的用法
- adb工具下载及安装
- 协整理论与面板数据分析
- LEBERT:Lexicon Enhanced Chinese Sequence Labelling Using BERT Adapter
- 深度学习:卷积神经网络从入门到精通
- 一篇小文入门 Python
- java sendkeys方法_java+selenium——键盘操作+复制粘贴(keys类)
- Problem A. Alarm Clock
- android没有adm_求助 Android studio的ADM打不开是什么原因