【发布时间】:2021-12-15 07:40:31
【问题描述】:
使用 JNI 或 Java Native Interface,可以在 Java 中使用 c++/c 类型和函数。我想用 Python 做类似的事情。有很多库用于从 Java 执行 Python 代码,例如 Jython,但我不想使用任何库。
从技术上讲,dll 文件只是编译后的机器代码,因此如果 c/c++ 可以编译成该文件,那么 Python 也可以。是否可以使用 Java 的内置本机接口从 Python 中使用类型和函数?这是我要完成的一个示例:
在 Python 中:(一个名为 hello.py 的文件)
import math
class ATestClass:
def run_something_very_important(self, a: float, b: float) -> float:
print("Hello!")
return math.cos(a * b)
生成的 DLL 文件将是 hello.dll
这就是 Java 中的代码:(在一个名为 hello.java 的文件中)
public class hello {
public native float run_something_very_important(float a, float b);
static {
System.loadLibrary("hello.dll");
}
}
【问题讨论】:
-
这个问题并不完全清楚。你为什么提出
dll的例子?您想将 Java 代码编译成dll并在 Python 中加载它吗?你想把你的 Python 代码编译成dll并用 Java 加载吗?您是否有“只想加载”的现有dll?您想从 Java 程序运行 Python 脚本吗?你想从 Python 脚本执行字节码吗?请edit发帖并澄清。 -
如果问题的核心围绕着 Python 和 Java 之间的交互,那么GraalVM 可能是一个选项。有关详细信息,请参阅 Wildhammer 的 this answer。 GraalVM 也使用库,但做得更多。它使用truffle将python代码转换为字节码。
标签: python java java-native-interface native java-native-library