从 pyinstaller 执行运行 exe 文件时 jpype 出错

时间:2021-07-04 09:29:16

标签: python pyinstaller

我的 python 脚本连接到 2 个数据库平台 DB2 和一个通用数据库。对于通用数据库连接,我将 jaydebeapi 与 jdbc jar 文件一起使用:

def clean_data():
...
    jdbc_driver_name = "com.abc.jdbc.ABDriver"
    jdbc_driver_loc="D:\Software\generic-jdbc.jar"
    jaydebeapi.connect(jdbc_driver_name, connection_string, {'user': dsn_uid, 'password': dsn_pwd}, jars=jdbc_driver_loc)
...

实际上,python 脚本运行良好。然后我想使用 pyinstaller 将我的 python 代码构建到一个 exe 文件中:

pyinstaller -y --additional-hooks-dir=. --hidden-import ibm_db_sa.ibm_db --hidden-import ibm_db_dbi --hidden-import ibm_db --add-binary e:\working\env\lib\site-packages\ibm_db_dlls\ibm_db.dll;.\ibm_db_dlls --add-data="E:\Working\env\Lib\site-packages\clidriver;.\clidriver" --add-binary D:\Software\generic-jdbc.jar;.\genericjdbc --add-binary E:\Working\env\Lib\site-packages\org.jpype.jar;.\j.py --onefile sync_data.py

pyinstaller 运行完成,我尝试从命令行执行这个 exe。但它通过波纹管错误:

**ERROR: Exception occurred 
Traceback (most recent call last):
  File "sync_data.py", line 122, in <module>
  **File "sync_data.py", line 62, in clean_data**
  File "site-packages\jaydebeapi\__init__.py", line 412, in connect
  File "site-packages\jaydebeapi\__init__.py", line 198, in _jdbc_connect_jpype
  File "site-packages\jpype\_core.py", line 221, in startJVM
SystemError: java.lang.ClassNotFoundException: org.jpype.classloader.DynamicClassLoader**

第 62 行的错误是代码行“jaydebeapi.connect”

在我的python脚本中,我没有使用jpype,从谷歌搜索,似乎python试图访问jar文件中的com.abc.jdbc.ABDriver类,因此需要启动JVM服务器。

以下是我使用过的软件包的版本号:

# Name                    Version                   Build  Channel
jpype1                    1.2.1            py38h59b6b97_0

# Name                    Version                   Build  Channel
jaydebeapi                1.2.3                      py_0

Python is 3.8.8

你能告诉我如何解决这个问题吗?

谢谢。

0 个答案:

没有答案
相关问题