【发布时间】:2021-11-03 10:08:12
【问题描述】:
我正在尝试使用Python MPXJ 来分析来自 mpp 文件的信息。在我的 Windows 10 机器中,我安装了 32 位 Python 3.8.0,并由 pip install jpype1 准备了 JPYPE。我也在C:\Program Files (x86)\Java\jre1.8.0_301中安装JRE 32bit。
但是,下面的脚本完全失败了
import jpype
print(jpype.getDefaultJVMPath())
jpype.startJVM()
print("JVM successfully started")
jpype.shutdownJVM()
它显示默认路径为C:\Program Files (x86)\Java\jre1.8.0_301\bin\client\jvm.dll,但是下一个打印行没有执行,startJVM 也没有给出任何错误输出。执行结果如下
> python testjvm.py
C:\Program Files (x86)\Java\jre1.8.0_301\bin\client\jvm.dll
所以startJVM 被执行,但没有给出任何东西就退出。
有没有办法进一步调试可能是什么问题?
根据 John 的建议,我正在使用 ipython 进行进一步调试。它使用以下上下文转到c:\python38\lib\site-packages\jpype\_core.py(226)
> c:\python38\lib\site-packages\jpype\_core.py(225)startJVM()
223 % (','.join([str(i) for i in kwargs])))
224
3-> 225 try:
226 _jpype.startup(jvmpath, tuple(args),
227 ignoreUnrecognized, convertStrings, interrupt)
ipdb> jvmpath
'C:\\Program Files (x86)\\Java\\jre1.8.0_301\\bin\\client\\jvm.dll'
ipdb> args
args = []
kwargs = {}
ipdb> tuple(args)
()
ipdb> ignoreUnrecognized
False
ipdb> convertStrings
False
ipdb> interrupt
False
那么无论我在_jpype.startup上按s或n,ipython都没有任何提示退出
【问题讨论】:
-
@JohnHennig,我使用 ipython 进入
startJVM。它转到lib\site-packages\jpype\_core.py(225),然后在执行_jpype.startup时退出。我在原始帖子中添加详细信息。是否需要使用 32 位 Visual Studio 来编译 32 位 jpype?以前我使用相同的 Visual Studio 为 VIM 32bit 编译youcompletemepyc,它工作正常。 -
谢谢@JohnHennig,经过进一步调查,我发现即使安装了 java x86,也无法在 x64 窗口中使用 JPype 运行 python x86。我将在回答帖子中详细说明