Я использую программу на Python с графическим интерфейсом на основе PyQt, чтобы подключиться к базе данных, все работало хорошо, пока это был скрипт на python, но возникла проблема при попытке его скомпилировать
https://github.com/pyinstaller/pyinstaller/
https://pypi.org/project/ibm_db/
такие привязки / соединитель DB2 Python получили файлы .dll / .pyd, которые не смогли связать
фрагмент кода
try:
import ibm_db
import ibm_db_dbi
logger.info("module loaded")
logger.info("ibm_db loaded from %s" % ibm_db.__file__)
logger.info("ibm_db_dbi loaded from %s" % ibm_db_dbi.__file__)
except:
logger.warn("failed to load db2 related modules")
logger.warn(traceback.format_exc())
try:
logger.info("environment variable are: %s" % str(os.environ))
except:
logger.warn(traceback.format_exc())
при выполнении в виде сценария
2019-03-06 14:22:39,032 | INFO: hello
D: dynamic load ibm_db from C:\Python27\lib\site-packages\ibm_db_dlls\ibm_db.dll
2019-03-06 14:22:39,825 | INFO: module loaded
2019-03-06 14:22:39,825 | INFO: ibm_db loaded from C:\Python27\lib\site-packages\ibm_db_dlls\ibm_db.dll
2019-03-06 14:22:39,825 | INFO: ibm_db_dbi loaded from C:\Python27\lib\site-packages\ibm_db_dbi.pyc
2019-03-06 14:22:39,825 | INFO: connecting ["DATABASE=testdb;HOSTNAME=172.25.31.153;PORT=50000;PROTOCOL=TCPIP;UID=db2inst1;PWD=password;", "", ""]
2019-03-06 14:22:40,776 | INFO: query SELECT * from SYSIBM.TABLES FETCH FIRST 5 ROWS ONLY
2019-03-06 14:22:40,776 | INFO: {'TABLE_TYPE': u'BASE TABLE', 'TABLE_SCHEMA': u'SYSIBM ', 'IS_INSERTABLE_INTO': u'YES', 'USER_DEFINED_TYPE_SCHEMA': None, 'TABLE_NAME': u'SYSTABLES', 'USER_DEFINED_TYPE_CATALOG': None, 'SELF_REFERENCING_COLUMN_NAME': None, 'TABLE_CATALOG': u'TESTDB', 'USER_DEFINED_TYPE_NAME': None, 'REFERENCE_GENERATION': None}
при компиляции с использованием pyinstaller
C:\Users\jack.wu>dist\test_db2\test_db2.exe
2019-03-06 14:23:17,769 | INFO: hello
D: dynamic load ibm_db from C:\Users\jack.wu\dist\test_db2\ibm_db_dlls\ibm_db.dll
2019-03-06 14:23:17,770 | WARNING: failed to load db2 related modules
2019-03-06 14:23:17,778 | WARNING: Traceback (most recent call last):
File "test_db2.py", line 27, in <module>
import ibm_db
File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 395, in load_module
exec(bytecode, module.__dict__)
File "site-packages\ibm_db.py", line 12, in <module>
File "site-packages\ibm_db.py", line 11, in __bootstrap__
ImportError: DLL load failed: The specified module could not be found.
Я пробовал несколько параметров, таких как --add-binary
или --hidden-import
, оба не работали, любая идея / подсказка?
[обновление 20190307] эта проблема в основном исчезает после запуска python setup.py install
ibm_db, вместо того, чтобы просто извлекать папку статически и помещать ее в ту же папку.обсуждение произошло в последней ситуации, более низкий приоритет, спасибо за ваше время:)