我的 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
你能告诉我如何解决这个问题吗?
谢谢。