繁体   English   中英

pysqlcipher 应用程序失败,64 位 python 和 pyinstaller 但 32 位正常 DLL 加载失败

[英]pysqlcipher app fails with 64 bit python and pyinstaller but 32 bit ok DLL Load failed

基于 Windows 11,我有一个使用 pysqlcipher 的小应用程序。 我用 Python 3.8.3 x86 和 Python 3.9.4 x64 编译了 pysqlcipher。 该应用程序在开发机器上都运行良好。

我使用 pyinstaller 编译为 exe,而不是 onefile,然后使用 inno setup 编译器编译 dist 文件夹 package。 对于 32 位 x86 python,当该应用程序安装在任何机器上时,它都可以正常工作。

如果我使用 x64 python 运行 pyinstaller,则应用程序在安装时无法运行。 我也在一个名为 test.py 的测试应用程序中对这两行进行了测试,它给出了同样的错误:

from pysqlcipher3 import dbapi2 as sqlite
print("Test")

使用 pyinstaller 和 python 3.9.4 x64 构建时,该应用程序将无法在任何其他计算机上运行,并且始终会失败并出现此 DLL 错误

Traceback (most recent call last):
  File "test.py", line 1, in <module>
  File "PyInstaller\loader\pyimod02_importers.py", line 352, in exec_module
  File "pysqlcipher3\dbapi2.py", line 33, in <module>
ImportError: DLL load failed while importing _sqlite3: The specified module could not be found.
[8940] Failed to execute script 'test' due to unhandled exception!

我已经尝试了所有我能想到的方法,包括将 sqlite.dll 作为二进制文件添加到 pyinstaller 中,但没有任何效果。

使用 python x64 文件夹构建的 dist 包含一个 pysqlcipher3 文件夹,其中包含 _sqlite3.cp39-win_amd64。

感谢任何帮助,花了几天时间却一无所获,需要使用仅适用于 x64 python 的库。

我追踪到 pyinstaller 添加了错误的 libcrypto DLL,它缺少 libcrypto-1_1-x64.dll 而是添加了 libcrypto-1_1.dll

通过在开发机器上运行程序并检查所有使用的 DLL,我发现缺少哪个 DLL。 这可以通过运行 tasklist.exe 来获取进程 ID,然后使用 Listdlls.exe 来显示使用了哪些来完成。

显示的错误暗示这是一个 pysqlcipher 问题,但实际上是错误的 libcrypto 问题。

我不确定它是否是我系统上的设置导致不包括 64 位 dll?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM