我们如何获取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?
答案 0 :(得分:0)
我们解决这个问题的答案是从使用Python 2.7解释器过渡到使用Jython。
使用Jython,我们能够使用Jadebeapi库并通过JDBC连接到数据库。