如何防止ctypes.CDLL(“ jvm.dll”)在Windows Server 2016上给出“找不到模块”错误?

时间:2018-07-18 08:04:22

标签: python-2.7 windows-server-2016 jpype

我们如何获取ctypes.CDLL(“ jvm.dll”)找不到dll并没有给出“找不到模块”错误?

我们已经验证了路径,并且可以通过jvm.dll的文件“打开”命令获取它们-但是,将完全相同的路径赋给ctypes会出现“找不到模块”错误。

我们还尝试将注册表项编辑为per this answer

我们还尝试了同时运行32位版本的Python和32位版本的Java以及64位版本。

我们正在Windows Server 2016上使用Python 2.7.14。

这为什么会失败,我们还能尝试什么?是否有阻止Python脚本查看DLL的东西?


这里有更多背景信息:

我们试图使ctypes起作用的原因是因为jpype失败并出现相同的错误-因此它们似乎与无法查看或访问DLL的Python模块有着根本的关系。

当我们运行以下命令时...

>> import ctypes
>> import os
>> os.chdir(r"C:\Program Files (x86)\Java\jre1.8.0_181\bin\client\")
>> ctypes.CDLL("jvm.dll")

...我们得到“找不到模块”。

但是,我们可以使用打开的命令访问该文件。例如,此调用从Python内部进行(请注意,它也适用于上面使用的x86路径)以到达jvm.dll:

>>> fo = open("C:\\Program Files\\Java\\jre1.8.0_181\\bin\\server\\jvm.dll")

但是即使通过Jpype进行的此调用都已路径相同的文件,也会失败:

>>> import jpype
>>> jpype.startJVM("C:\\Program Files\\Java\\jre1.8.0_181\\bin\\server\\jvm.dll")

Jpype出现以下错误:

  

文件“ C:\ Python27 \ lib \ site-packages \ jpype_core.py”,第70行,在   启动JVM       _jpype.startup(jvm,tuple(args),True)RuntimeError:无法加载DLL [C:\ Program Files \ Java \ jre1.8.0_181 \ bin \ server \ jvm.dll],   错误=找不到指定的模块。在   native \ common \ include \ jp_platform_win32.h:58

我们使用jpype的原因是我们试图让Jaydebeapi能够创建与数据库的JDBC连接。

我们如何启用ctypes(大概是jpype)来查找和使用jvm.dll?

1 个答案:

答案 0 :(得分:0)

我们解决这个问题的答案是从使用Python 2.7解释器过渡到使用Jython。

使用Jython,我们能够使用Jadebeapi库并通过JDBC连接到数据库。