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

Pra*_*les 7 python-2.7 jpype windows-server-2016

我们如何让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")
Run Code Online (Sandbox Code Playgroud)

......我们得到"找不到模块".

但是,我们可以使用open命令访问该文件.例如,此调用在Python内部工作(注意它也适用于上面使用的x86路径)来访问jvm.dll:

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

但是这个通过Jpype的调用失败了,即使它被修改为同一个文件:

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

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?

Pra*_*les 0

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

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