使用 pyinstaller 和 pysqlcipher 创建一个文件 exe 时出现问题

2024-03-14

我正在尝试创建一个文件 .exe 以在任何 Windows 计算机上运行,​​但我遇到了 pysqlcipher 问题。我已经回到了一些基本代码,仅使用密钥创建一个简单的数据库,在我的开发机器上,无论我使用 python 文件还是编译的 exe,一切都工作正常。我似乎缺少库、路径或两者都缺少?我尝试使用 --add-data 添加各种项目,但花了几个小时却没有取得任何进展。这是 python 的基本部分:-

from pysqlcipher3 import dbapi2 as sqlite
import os
import sys

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

conn = sqlite.connect('test.db')
c = conn.cursor()
c.execute("PRAGMA key='password'")
c.execute('''create table stocks (date text, trans text, symbol text, qty real, price real)''')
c.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""")
conn.commit()
c.close()

当我在另一台 Windows 10 PC 上运行 exe 时,出现此错误

回溯(最近一次调用最后一次): 文件“testdb.py”,第 1 行,位于 文件“c:\users\xxx\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\loader\pyimod03_importers.py”,第 623 行,在 exec_module 中 文件“site-packages\pysqlcipher3-1.0.3-py3.8-win-amd64.egg\pysqlcipher3\dbapi2.py”,第 33 行,位于 ModuleNotFoundError:没有名为“pysqlcipher3._sqlite3”的模块 [9248] 无法执行脚本 testdb

该错误引用了我的开发 PC 上的路径,还引用了 dbapi2.py 中的第 33 行,即:-

from pysqlcipher3._sqlite3 import *

我尝试在运行 pyinstaller 时添加各种文件,但没有取得任何进展,我确信这并不简单,但需要帮助。


我不久前遇到了类似的问题,对我有用的一件事是在 pyinstaller 的规范文件中添加 sqlite3 dll。也可以从命令行添加它。我之前尝试过很多其他的事情,比如重新创建 conda 环境和重建我的 python 包,但这没有用。在添加 pyinstaller 二进制文件的规范文件中,请尝试类似的操作。

binaries=[('C:\\Users\\myname\\newfolder\\sqlite3.dll','.')]

您可以从以下位置下载 DLLhttps://www.sqlite.org/download.html https://www.sqlite.org/download.html取决于 Windows 或 Linux 平台。添加 dll 并重新编译后应该没问题。我认为这个错误主要是在 dbapi2 请求 sqlite3 dll 时发生的,在我的例子中,DLL 文件夹中缺少 atlease。我刚刚下载并将其添加到我的规范文件中,但您也可以尝试将其添加到 hookspath 或 ENV 文件夹中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pyinstaller 和 pysqlcipher 创建一个文件 exe 时出现问题 的相关文章