运行 Python 个模块 Python,来自 Jython

Running Python modules in Python, from Jython

我进入了一个复杂的环境,我正在使用 Python 库,但我们拥有的所有其他东西都在 Java 中。我们希望能够从 Java 访问和使用 Python 库,因此我们开始研究和使用 Jython。

Jython 非常棒,我们正在将 Jython Interpreter 导入我们的 Java 程序中,以便我们可以访问大部分库。然而,Jython 并不完全支持所有内容,我们也无能为力。所有路径都设置正确,但有些模块我们无法导入。

所以假设我们无法做任何其他事情来使 Python 库与 Jython 兼容,下一个想法是以某种方式从 Jython 解释器调用 Python,并使 Python 运行一个模块(写在Python)。理想情况下,我们可以使用 Python 简单地导入模块,然后使用 Jython 调用所有方法(但让它们在 Python 中执行)。

有谁知道这是否可能,如果可能的话如何?

您应该能够使用 Pyro 在 Jython 和 CPython 之间发送方法调用及其 return 数据。它的设计使得 "objects can talk to each other over the network" 但没有理由不能在一台机器上的两种不同类型的 Python 之间使用相同的技术。

在 Pyro 文档中,您会找到一个 simple example,它向您展示了启动它所需了解的几乎所有内容,并且 运行。

你应该看看

两者都是专为您的需求而设计的框架。还要关注仍处于早期状态的 JyNI (www.jyni.org),但会极大地改进 Jython 对大量 Python 框架的支持。

使用 Pyro (https://pypi.python.org/pypi/Pyro4) 你可能也能解决你的任务,但请记住,它实际上并不是为此目的而设计的,而是为分布式网络的东西而设计的。这 可以 产生微妙的问题(例如性能不佳),使其成为一个前卫的解决方案。这不一定是这种情况,但我建议如果有的话,我会更喜欢任务的解决方案 intended。 然而,这只是一个提示和谦虚的警告,因为我实际上并没有在实践中比较命名的方法。

通过在 Java 代码中使用 Pyrolite,您可以完全避免使用 Jython 并通过 Pyro 与 python 对话。 Pyrolite 是一个轻量级客户端库,可以让您的 java 程序直接与 Pyro 对话。只要你的 java 程序只是一个 Pyro 客户端就可以工作。