【问题标题】:Java Python without interpreter没有解释器的 Java Python
【发布时间】:2019-09-06 18:57:51
【问题描述】:

所以我正在研究各种 Java 包,它们允许您通过 Java 运行 python 代码。 Jython 不处理相当于 python 3.6 的代码。所以基本上,我有用 python 3.6 编写的代码并且需要这样。我需要能够在没有 python 解释器的情况下通过 Java 使用该 python 代码。有这样的包吗? (请注意,我不会更改 python 代码,因为它是一个框架,并且传统上用于 python。 我有一个 python 框架,当然,传统上可以通过 python 代码使用,用于 python 3.6。相反,我想通过 Java 8 代码来使用它。现在我查看了 Jython,但它不能处理 3.6 或 3.x。我不会更改框架中的 python 代码。此外,Java 包应该能够在没有解释器的情况下运行 python 代码。有这样的事吗? Py4j 需要 python 解释器。

【问题讨论】:

  • "在没有解释器的情况下运行 python".. 嗯?这就像要求在没有 JVM 的情况下运行 Java。
  • 为了让 Java 能够在没有解释器的情况下运行 python 需要它实现一个解释器。
  • @JustAFellowCoder:您可能需要两个操作系统进程,一个用于 Python 代码,一个用于 Java 代码,它们可以以某种方式进行通信(例如环回接口上的 TCP 套接字)。这是一个通用解决方案,适用于以任何语言编写的任何软件。当然,在这种情况下,Python 代码需要 Python 解释器(或等效的)来执行,而 Java 代码需要 JVM 来执行;这些环境将简单地存在于单独(并行)的操作系统进程中。
  • @JustAFellowCoder:是的,它叫做 Jython。
  • @JustAFellowCoder:据我所知,不存在用纯 Java 编写的 Python 解释器的非 Jython 实现。如果存在,它将成为 Jython 的竞争对手;如果它是开源的,它可能会被 Jython 项目吸收(反之亦然)。如果您需要,欢迎您自己编写这样的解释器!

标签: java python python-3.x


【解决方案1】:

GraalVM 将 Python 代码编译为 Java 字节码并使用 graalpython 在 JVM 上运行它,但需要注意的是:

这个 Python 实现目前的目标是与 Python 3.7 兼容,但距离那里还有很长的路要走,而且很可能任何需要任何导入的 Python 程序都会遇到不支持的东西。此时,Python 实现可供实验和好奇的最终用户使用。

【讨论】:

    【解决方案2】:

    不,运行 Python 代码需要一些 Python 解释器或其他。

    【讨论】:

    • 或针对另一种语言(例如 Cython)的 Python 编译器/转译器,尽管它有其自身的局限性。
    【解决方案3】:

    由于您不会更改它,您可以将 Python 转换为可执行文件并使用 Java 将其作为新进程生成。

    ProcessBuilder pb = new ProcessBuilder("C:\\...\\file.exe", command arguments, ..., ...);
    pb.start();
    

    您可以使用文件 I/O 在 Python 和 Java 之间进行通信,这是最简单的解决方案。

    【讨论】:

    • 这不会在“没有解释器的情况下”运行,它只是将解释器与编译的 Python 字节码一起嵌入到可执行文件中。你仍然需要一个进程外 Python 解释器。
    • 如果 Python 脚本与该框架中的其他 Python 脚本交互,这个方法会不会弄乱它。
    • @JustAFellowCoder 查看 py2exe
    • @JustAFellowCoder 如果实际的 python 解释器安装在您要运行的机器上,那么您不需要转换为 exe。您可以像在命令行上一样从 java 运行 python 进程
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2018-10-26
    • 2021-09-07
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多