如何在Windows Server 2016上防止ctypes.CDLL("jvm.dll")出现"module not found"错误?

7
我们如何让ctypes.CDLL("jvm.dll")无法找到dll并且不会出现“模块未找到”错误?
我们已经验证了路径,并且可以通过文件“打开”命令获取jvm.dll的路径-但是当将完全相同的路径提供给ctypes时,会出现“模块未找到”错误。
我们还尝试根据此答案编辑注册表键。
我们也尝试运行32位版本的Python和32位版本的Java,以及尝试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")

当我们使用import语句时,有时会出现“模块未找到”的情况。然而,我们可以通过open命令打开文件。例如,从Python内部调用以下命令可以访问jvm.dll(请注意,它也适用于上面使用的x86路径)。
>>> 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], 错误=找不到指定的模块。 在本机\ common \ include \ jp_platform_win32.h:58
我们使用jpype的原因是我们正在尝试让Jaydebeapi工作,以创建与数据库的JDBC连接。
如何启用ctypes(并可能因此启用jpype)以查找和使用jvm.dll?

免责声明:完全猜测...您尝试在program files(例如c:\java\...)之外安装jre了吗?这可能是文件权限/Windows文件保护问题。 - MisterSmith
1个回答

0
我们解决这个问题的答案是从使用Python 2.7解释器转换到使用Jython。
使用Jython,我们能够使用Jadebeapi库并通过JDBC连接到数据库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接