【问题标题】:ibm_db, pyinstaller, DLL issueibm_db、pyinstaller、DLL 问题
【发布时间】:2020-07-23 19:43:05
【问题描述】:

我的问题是:
我正在尝试打包一个下面提到的具有 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
点 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 ^
--name=test ^
--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>

【问题讨论】:

  • 请编辑您的问题以添加事实(请不要使用 cmets,它们会丢失且不可搜索)。什么 MS-Windows 版本?哪个版本?它是 32 位 Windows 吗? MS-Windows 是在虚拟机还是 docker 容器中运行?运行 pyinstaller 的主机名是否与您运行构建的 EXE 的主机名相同?

标签: python db2 pyinstaller


【解决方案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 的任何依赖关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-26
    • 2019-04-06
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    相关资源
    最近更新 更多