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

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

【问题讨论】:

    标签: python module compilation


    【解决方案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 扩展。
        • 实际上,我正在寻找一种在已经运行的环境中注入代码的解决方案。但是这段代码需要非常快,所以解释不是一种选择。
        猜你喜欢
        • 2022-09-28
        • 1970-01-01
        • 1970-01-01
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 2012-05-19
        相关资源
        最近更新 更多