是否可以本地编译 Python(除了 pyc 字节码)?

Posted

技术标签:

【中文标题】是否可以本地编译 Python(除了 pyc 字节码)?【英文标题】:Is it possible to compile Python natively (beyond pyc byte code)? 【发布时间】:2010-09-17 07:57:04 【问题描述】:

我想知道是否可以从 Python 脚本创建可执行模块。我需要拥有 Python 脚本的最大性能和灵活性,而不需要在 Python 环境中运行。我将使用此代码按需加载用户模块来自定义我的应用程序。

【问题讨论】:

【参考方案1】: pyrex 将类似 python 的源代码编译为 python 扩展模块 rpython 允许您在编译 python 时对各种后端(如 C、LLVM、.Net 等)有一些限制。 还有shed-skin 将python 翻译成C++,但我不能说它是否有任何好处。 PyPy 实现了一个 JIT 编译器,如果您为可能是可行路径的 PyPy 解释器编写代码,它会尝试通过将运行时运行的部分转换为机器代码来优化运行时。 在 PyPy 中研究 JIT 的同一位作者之前曾写过 psyco,该作者在 CPython 解释器中优化了 python。

【讨论】:

AFAIK rpython 不会取代 pyrex;它们是单独的努力,派瑞克斯应该仍然可以正常工作(这将是我的第二个建议,在用 C/C++ 重写问题区域之后)。 还有 IronPython(假设是 Windows 或 Mono),但能否获得额外的速度值得怀疑。 rpython 和 PyPy 的链接已关闭。【参考方案2】:

我使用Cython 取得了很大的成功,它基于并扩展了 pyrex:

Cython 是一种使 为 Python 编写 C 扩展 像 Python 本身一样简单的语言。 Cython 基于众所周知的 Pyrex,但支持更多前沿 功能和优化。

Cython 语言非常接近于 Python 语言,但 Cython 另外支持调用C 函数和声明 C 类型 变量和类属性。这 允许编译器生成非常 来自 Cython 代码的高效 C 代码。

这使得 Cython 成为理想的语言 用于包装外部 C 库, 以及用于加速的快速 C 模块 Python代码的执行。

【讨论】:

【参考方案3】:

我认为你可以使用 jython 将 python 编译为 Java 字节码,然后使用 GCJ 进行编译。

【讨论】:

【参考方案4】:

您可以使用 py2exe 之类的工具将您的 python 脚本编译为 exe,或者使用 Freeze 来编译 linux 二进制文件。

见:How can I create a directly-executable cross-platform GUI app using Python?

【讨论】:

@Howler,py2exe 不会提供 OP 要求的大部分内容。代码仍在 Python 运行时中运行(尽管已重命名),并且不会比脚本本身运行得更快)@David:您可能需要考虑用 C/C++ 重写主应用程序并使用 Python 进行扩展。跨度> 或者不是重写主应用程序,而是找到热点并用 C/C++ 将其编写为 Python 扩展。 实际上,我正在寻找一种在已经运行的环境中注入代码的解决方案。但是这段代码需要非常快,所以解释不是一种选择。

以上是关于是否可以本地编译 Python(除了 pyc 字节码)?的主要内容,如果未能解决你的问题,请参考以下文章

python基础 pyc

什么是pyc

python中的pyc和pyo文件和__pyc__文件夹

Python啥情况下会生成pyc文件

python编译文件(pyc)即使编译为字节码也需要系统上的导入库吗?

Python的字节编译