作者:2yuheng | 来源:互联网 | 2022-12-10 12:49
我们如何让ctypes.CDLL("jvm.dll")找不到dll并且没有给出"找不到模块"错误?
我们已经验证了路径,并且可以通过jvm.dll的文件"打开"命令来获取它们 - 但是当给予ctypes时,完全相同的路径会给出"找不到模块"错误.
我们还尝试按照这个答案编辑注册表项.
我们还尝试使用32位版本的Java运行32位版本的Python以及尝试64位版本.
我们在Windows Server 2016上使用Python 2.7.14.
为什么这会失败,我们还能尝试什么呢?有什么东西阻止Python脚本看到DLL?
这里有更多背景资料:
我们试图让ctypes工作的原因是因为jpype失败了同样的错误 - 因此它们似乎与Python模块无法查看或访问DLL有关.
当我们运行以下命令时......
>> import ctypes
>> import os
>> os.chdir(r"C:\Program Files (x86)\Java\jre1.8.0_181\bin\client\")
>> ctypes.CDLL("jvm.dll")
......我们得到"找不到模块".
但是,我们可以使用open命令访问该文件.例如,此调用在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行,在startJVM中_jpype.startup(jvm,tuple(args),True)RuntimeError:无法加载DLL [C:\ Program Files\Java\jre1.8.0_181\bin\server\jvm.dll],error =找不到指定的模块.在native\common\include\jp_platform_win32.h:58
我们使用jpype的原因是我们试图让Jaydebeapi创建与数据库的JDBC连接.
我们如何启用ctypes(可能是jpype)来查找和使用jvm.dll?