簡體   English   中英

ibm_db、pyinstaller、DLL 問題

[英]ibm_db, pyinstaller, DLL issue

我的問題是:
我正在嘗試 package 一個簡單的代碼,它在下面提到了 import ibm_db,但我無法做到,因為它給了我下面提到的錯誤。 我在 SO 和其他網站上進行了很多研究,但是我遇到的大多數解決方案都說使用 --add-binary 添加 DLL,我也嘗試過,但是仍然出現下面提到的錯誤.
我正在使用 Windows 10 64 位操作系統,基於 x64 的處理器。
我正在使用使用python -m venv env創建的虛擬環境
下面提到的軟件包安裝在我的虛擬環境中。
我希望所有這些細節都足夠了,並且可以作為一個問題。

-- PYTHON 版本 --
Python 3.7.8

-- 已安裝 PYTHON 封裝 --
altgraph 0.17
未來 0.18.2
ibm-db 3.0.2
pefile 2019.4.18
pip 20.1.1
PyInstaller 3.6
pywin32-ctypes 0.2.0
安裝工具 47.1.0

-- 我的密碼 --

import ibm_db<br>
print(ibm_db.`__version__`)<br>

-- 使用 PYINSTALLER 為我的上述代碼創建 PACKAGE --
pyinstaller --noconfirm ^
--名稱=測試 ^
--hidden-import "pkg_resources.py2_warn" ^
--add-binary C:\Users\vrajendrasinghpar\Desktop\test\env\Lib\site-packages\ibm_db_dlls\ibm_db.dll;.\ibm_db_dlls ^
test_ibm_db.py

-- 得到以下錯誤 --

Traceback (most recent call last):<br>
  File "test\test_ibm_db.py", line 1, in `<module>`<br>
  File "c:\users\vrajendrasinghpar\desktop\test\env\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 623, in exec_module<br>
    exec(bytecode, module.`__dict__`)<br>
  File "lib\site-packages\ibm_db.py", line 28, in `<module>`<br>
  File "lib\site-packages\ibm_db.py", line 26, in `__bootstrap__`<br>
  File "imp.py", line 345, in load_dynamic<br>
ImportError: DLL load failed: The specified module could not be found.<br>
[27420] Failed to execute script test_ibm_db<br>

您的問題沒有提到構建主機名是否與運行主機名相同。

此答案假定您在與構建主機名不同的 Microsoft-Windows 主機名上運行構建的可執行文件(pyinstaller 的輸出)。

如果您使用的是 IBM 提供的 clidriver(這是 python ibm_db 的默認值),並且尚未在目標環境中安裝,並且如果 IBM 提供的替代 Db2 CLI 驅動程序也未預安裝在目標環境中,那么您必須在構建時將 clidriver 與您的 pyinstaller output 捆綁在一起。

您可以在 pyinstaller 中包含 clidriver 樹內容和以下附加參數:

--add-data="c:\path\to\clidriver;.\clidriver" ^

您可以使用pip show ibm_db和 append clidriver 找到 clidriver 到Location:名稱的路徑。

如果你像這樣捆綁,有一些注意事項:

  • 您的捆綁包“及時凍結”。 當 IBM 更新其 clidriver 時,您之前構建的可執行文件將無法從安全修復、缺陷修復和增強功能中受益,除非您重新運行 pystaller 以包含最新的 clidriver 並重新分發。 IBM 通常每年至少更新兩次此 clidriver。 如果您使用加密連接 (TLS/SSL),這一點尤其重要。

  • 由於其中包含 clidriver,您的捆綁包大小將增加。

  • 在目標 Microsoft-Windows 環境中,解壓縮dist\$name后,您可能需要運行clidriver\bin\db2cli install -setup以向 Microsoft Windows 注冊組件。 這允許odbcad32了解驅動程序並允許通過odbcad32 GUI 進行一些配置功能。

  • 每個目標主機名也必須滿足 clidriver 的任何依賴關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM