从 python 访问 JVM
Accessing JVM from python
>>> import boilerpipe
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Anaconda\lib\site-packages\boilerpipe\__init__.py", line 10, in <module>
jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=%s" % os.pathsep.join(jars))
File "C:\Anaconda\lib\site-packages\jpype\_core.py", line 50, in startJVM
_jpype.startup(jvm, tuple(args), True)
RuntimeError: Unable to load DLL [C:\Program Files\Java\jre7\bin\client\jvm.dll], error = The specified module could not be found.
at native\common\include\jp_platform_win32.h:58
试过:
正在重新安装 jvm
>> import ctypes
>> import os
>> os.chdir(r"<path to Java bin client folder>")
>> ctypes.CDLL("jvm.dll")
Still unable to fix
编辑:
试过下面的代码,仍然卡住:
from py4j.java_gateway import JavaGateway
gateway = JavaGateway()
它给出了与以前相同的错误。
请检查!
- 给出真实路径(
"C:\Program Files\Java\jre7\bin\client\jvm.dll"
)
- 检查所有 32 位或 64 位(我的报价始终使用 32 位 Anaconda、JRE7、Python 等)
- 安装pywin32(当然python2.7.9)
- 授予权限
jvm.dll
(可以运行)
- 一切ok后试试:
import ctypes
ctypes.CDLL('C:\Program Files\Java\jre7\bin\client\jvm.dll')
***有些java版本的可能挂不了
我用了 jre-7u55-windows-i586.exe
希望对您有所帮助!最好的问候!
适用于 wine(无错误):
正在回答,因为我没有足够的评论代表;尝试使用原始字符串而不是允许“\x”转义的普通字符串。尝试:
>>> ctypes.CDLL(r'C:\Program Files (x86)\Java\jre1.8.0_40\bin\client\jvm.dll')
因为字符串的“\...”部分很可能被转义。
以上答案还不够,还需要按照 Bjorns .
安装 Microsoft Visual C++ 2010 Redistributable Package (x86)
安装 C++ 可再发行组件后:
- 将 JAVA_HOME 环境变量设置为 ("C:\Program Files\Java\jre7")
使用上述路径启动jvm:
path_to_jvm = "C:\Program Files\Java\jre7\bin\client\jvm.dll"
jpype.startJVM(path_to_jvm)
jpype.startJVM(jpype.getDefaultJVMPath())
如果您尝试在 Windows 操作系统上访问 JVM,请确保安装了正确版本的 JVM(32 位或 64 位)。在我的例子中 python 是 64 位的,一旦我安装了 Java 64 位,它就可以工作而无需指定路径或任何其他额外要求。
>>> import boilerpipe
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Anaconda\lib\site-packages\boilerpipe\__init__.py", line 10, in <module>
jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=%s" % os.pathsep.join(jars))
File "C:\Anaconda\lib\site-packages\jpype\_core.py", line 50, in startJVM
_jpype.startup(jvm, tuple(args), True)
RuntimeError: Unable to load DLL [C:\Program Files\Java\jre7\bin\client\jvm.dll], error = The specified module could not be found.
at native\common\include\jp_platform_win32.h:58
试过: 正在重新安装 jvm
>> import ctypes
>> import os
>> os.chdir(r"<path to Java bin client folder>")
>> ctypes.CDLL("jvm.dll")
Still unable to fix
编辑: 试过下面的代码,仍然卡住:
from py4j.java_gateway import JavaGateway
gateway = JavaGateway()
它给出了与以前相同的错误。
请检查!
- 给出真实路径(
"C:\Program Files\Java\jre7\bin\client\jvm.dll"
) - 检查所有 32 位或 64 位(我的报价始终使用 32 位 Anaconda、JRE7、Python 等)
- 安装pywin32(当然python2.7.9)
- 授予权限
jvm.dll
(可以运行) - 一切ok后试试:
import ctypes
ctypes.CDLL('C:\Program Files\Java\jre7\bin\client\jvm.dll')
***有些java版本的可能挂不了
我用了 jre-7u55-windows-i586.exe
希望对您有所帮助!最好的问候!
适用于 wine(无错误):
正在回答,因为我没有足够的评论代表;尝试使用原始字符串而不是允许“\x”转义的普通字符串。尝试:
>>> ctypes.CDLL(r'C:\Program Files (x86)\Java\jre1.8.0_40\bin\client\jvm.dll')
因为字符串的“\...”部分很可能被转义。
以上答案还不够,还需要按照 Bjorns
安装 C++ 可再发行组件后:
- 将 JAVA_HOME 环境变量设置为 ("C:\Program Files\Java\jre7")
使用上述路径启动jvm:
path_to_jvm = "C:\Program Files\Java\jre7\bin\client\jvm.dll"
jpype.startJVM(path_to_jvm)
jpype.startJVM(jpype.getDefaultJVMPath())
如果您尝试在 Windows 操作系统上访问 JVM,请确保安装了正确版本的 JVM(32 位或 64 位)。在我的例子中 python 是 64 位的,一旦我安装了 Java 64 位,它就可以工作而无需指定路径或任何其他额外要求。