Я пытаюсь заморозить приложение, в котором используется модуль полки. Чтобы заморозить его, я использую код Python GUI2EXE и использую часть cx_freeze (все отлично работает, если я удаляю часть полки).
Когда я запускаю свое скомпилированное приложение, оно жалуется на
File "anydbm.pyc", line 62, in ?
ImportError: no dbm clone found; tried ['dbhash', 'gdbm', 'dbm',
'dumbdbm']
Я искал ответы. Большинство из них сказали добавить это в сценарий:
for i in ['dbhash', 'gdbm', 'dbm', 'dumbdbm']:
try: eval('import '+i)
except: pass
Но мне это ничего не дало. Если я включу модуль dbhash, я получу ошибки, связанные с отсутствием модуля bsddb. Я не могу понять эту проблему. Я неправильно реализовал вышеизложенное? Я что-то упускаю?
PS, мне нужно использовать cx_freeze — другие (py2exe, pyinstaller) плохо работают с другими частями моей программы. Кроме того, я действительно хотел бы использовать полку — как я уже сказал, она прекрасно компилируется и работает без нее.
Спасибо!
ИЗМЕНИТЬ
По просьбе Майка я прикрепил сценарий установки. Да, я пытался включить модули (не показаны), но это не работает. Я даже включил anydbm и dbhash в свой основной скрипт. Это тоже не работает.
Кроме того, если вы знаете лучший способ хранения моих переменных/списков/диктов/и т. д., чем полка, я хотел бы знать. Я попробовал ZODB (тоже не очень хорошо). В настоящее время я нашел pdict (с PersistentDict), и это хорошо работает, когда я замораживаю приложение. Тем не менее, я считаю, что полка работает быстрее. Хотелось бы, чтобы полка работала, если это возможно...
Мой скрипт установки:
from cx_Freeze import setup, Executable
includes = []
excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',
'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
'Tkconstants', 'Tkinter']
packages = []
path = []
for i in ['dbhash', 'gdbm', 'dbm', 'dumbdbm']:
try:
eval('import '+i)
except:
pass
GUI2Exe_Target_1 = Executable(
# what to build
script = "myscript.py",
initScript = None,
base = 'Win32GUI',
targetDir = r"dist",
targetName = "myscript.exe",
compress = True,
copyDependentFiles = False,
appendScriptToExe = False,
appendScriptToLibrary = False,
icon = None
)
setup(
version = "0.1",
description = "No Description",
author = "No Author",
name = "cx_Freeze Sample File",
options = {"build_exe": {"includes": includes,
"excludes": excludes,
"packages": packages,
"path": path
}
},
executables = [GUI2Exe_Target_1]
)