有可能将Python程序转换为C/ c++吗?
我需要实现几个算法,我不确定性能差距是否大到足以证明我在C/ c++(我不擅长)中所经历的所有痛苦。我想写一个简单的算法,并将其与这样一个转换后的解决方案进行比较。如果仅这一点就比Python版本快得多,那么我就别无选择,只能用C/ c++来实现。
有可能将Python程序转换为C/ c++吗?
我需要实现几个算法,我不确定性能差距是否大到足以证明我在C/ c++(我不擅长)中所经历的所有痛苦。我想写一个简单的算法,并将其与这样一个转换后的解决方案进行比较。如果仅这一点就比Python版本快得多,那么我就别无选择,只能用C/ c++来实现。
当前回答
Shed Skin是“一个(受限的)python -to- c++编译器”。
从文档中可以看出:
Shed Skin是一个实验性的编译器,它可以将纯的但隐式静态类型的Python(2.4-2.6)程序转换为优化的c++。它可以生成独立的程序或扩展模块,可以导入并在更大的Python程序中使用。
除了类型限制外,程序不能自由使用Python标准库(尽管目前支持大约25个常用模块,如random和re)。此外,并不是所有的Python特性,比如嵌套函数和可变数量的参数都被支持。
对于一组由75个非平凡程序组成的程序(总共超过25000行(sloccount)),测量结果显示,与CPython相比,典型的加速速度提高了2-200倍。
其他回答
是的。看Cython。它所做的就是:将Python转换为C来加速。
我意识到一个全新的解决方案的答案缺失了。如果在代码中使用Numpy,我建议尝试Pythran:
http://pythran.readthedocs.io/
对于我尝试的函数,Pythran提供了非常好的结果。生成的函数与编写良好的Fortran代码一样快(或者只是稍微慢一点),比(相当优化的)Cython解决方案快一点。
与Cython相比,它的优点是您只需在为Numpy优化的Python函数上使用Pythran,这意味着您不必展开循环并为循环中的所有变量添加类型。Pythran会花时间分析代码,以便理解numpy.ndarray上的操作。
与Numba或其他基于即时编译的项目相比,这也是一个巨大的优势(据我所知),对于这些项目,您必须扩展循环才能真正有效。然后带有循环的代码只使用CPython和Numpy会变得非常非常低效……
Pythran的一个缺点:没有类!但是因为只有真正需要优化的函数才需要编译,所以这并不是很烦人。
另一点:Pythran很好(而且很容易)支持OpenMP并行。但是我不认为mpi4py是受支持的…
刚在黑客新闻里看到这个新工具。
从他们的页面-“Nuitka是Python解释器的一个很好的替代品,并编译CPython 2.6, 2.7, 3.2和3.3提供的每个构造。它将Python转换为c++程序,然后使用“libpython”以与CPython相同的方式执行,以一种非常兼容的方式。”
Shed Skin是“一个(受限的)python -to- c++编译器”。
从文档中可以看出:
Shed Skin是一个实验性的编译器,它可以将纯的但隐式静态类型的Python(2.4-2.6)程序转换为优化的c++。它可以生成独立的程序或扩展模块,可以导入并在更大的Python程序中使用。
除了类型限制外,程序不能自由使用Python标准库(尽管目前支持大约25个常用模块,如random和re)。此外,并不是所有的Python特性,比如嵌套函数和可变数量的参数都被支持。
对于一组由75个非平凡程序组成的程序(总共超过25000行(sloccount)),测量结果显示,与CPython相比,典型的加速速度提高了2-200倍。
http://code.google.com/p/py2c/看起来有可能——他们也在网站上提到:Cython, Shedskin和RPython,并确认他们正在将Python代码转换为纯C/ c++,这比充斥着Python API调用的C/ c++要快得多。注意:我还没有试过,但我打算试一试。