Проблема создания одного файла exe с помощью pyinstaller и pysqlcipher

Я пытаюсь создать один файл.exe для запуска на любом компьютере с Windows, но у меня возникла проблема с pysqlcipher. Я вернулся к некоторому базовому коду, который просто создает простую базу данных с ключом, на моей машине dev все работает нормально, использую ли я файл 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()

Когда я запускаю exe на другом ПК с Windows 10, я получаю эту ошибку

Отслеживание (последний вызов последним): файл "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.

Ошибка ссылается на путь на моем компьютере разработчика, а также на строку 33 в dbapi2.py, которая:-

from pysqlcipher3._sqlite3 import *

Я пробовал добавлять различные файлы при запуске pyinstaller, но у меня нет прогресса, я уверен, что это не так просто, но нужна помощь, пожалуйста.

1 ответ

Некоторое время назад я столкнулся с подобной проблемой, и одна вещь, которая сработала для меня, - это добавление dll sqlite3 в файл спецификации pyinstaller. Также возможно добавить его из командной строки. Раньше я пробовал много других вещей, таких как воссоздание среды conda и пересборка моего пакета python, но это не сработало. В вашем spec-файле, куда вы добавляете двоичные файлы pyinstaller, попробуйте что-нибудь вроде.

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

Вы можете загрузить DLL с https://www.sqlite.org/download.html в зависимости от платформы Windows или Linux. После того, как вы добавите dll и перекомпилируете, все будет в порядке. Я думаю, что эта ошибка в основном возникает, поскольку dbapi2 запрашивает dll sqlite3, который в моем случае, пожалуйста, отсутствовал в папке DLL. Я только что загрузил и добавил его в свой файл спецификации, но вы также можете попробовать добавить его в папку hookspath или ENV.

Другие вопросы по тегам