ibm_db、pyinstaller、DLL 问题

问题描述 投票:0回答:1

我的问题是:
我正在尝试打包下面提到的具有 import ibm_db 的简单代码,但我无法做到这一点,因为它给了我下面提到的错误。我在SO和其他网站上进行了很多研究,但我遇到的大多数解决方案都说使用--add-binary添加DLL,我也尝试过,但仍然收到下面提到的错误.
我使用的是 Windows 10 64 位操作系统、基于 x64 的处理器。
我正在使用使用

python -m venv env

创建的虚拟环境 下面提到的软件包安装在我的虚拟环境中。
我希望所有这些细节都足够并且可以作为一个问题。

--Python版本--
Python 3.7.8

-- Python 包已安装 --
替代图 0.17
未来0.18.2
ibm-db 3.0.2
2019.4.18
点 20.1.1
PyInstaller 3.6
pywin32-ctypes 0.2.0
安装工具 47.1.0

-- 我的代码--

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

--使用PYINSTALLER为我的上述代码创建包--
pyinstaller --noconfirm ^
--名称=测试^
--隐藏导入“pkg_resources.py2_warn”^
--add-binary C:\Users rajendrasinghpar\Desktop est nv\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>
python db2 pyinstaller
1个回答
1
投票

您的问题没有提到构建主机名是否与运行主机名相同。

此答案假设您正在与构建主机名不同的 Microsoft-Windows 主机名上运行构建的可执行文件(pyinstaller 的输出)。

如果您正在使用 IBM 提供的 clidriver(这是 python ibm_db 的默认设置),并且目标环境上尚未安装该驱动程序,并且目标环境上也未预安装 IBM 提供的替代 Db2 CLI 驱动程序,那么您必须在构建时将 clidriver 与 pyinstaller 输出捆绑在一起。

您可以使用以下 additional 参数将 clidriver 树内容包含到 pyinstaller 中:

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

您可以使用

pip show ibm_db
找到 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 的任何依赖关系。

© www.soinside.com 2019 - 2024. All rights reserved.