我想冻结涉及使用搁置模块的应用程序。为了冻结它,我使用了GUI2EXE python代码并利用了cx_freeze部分(如果我删除搁架部分,一切都很好)。Python和冻结应用程序与shelve.py
当我去跑我的编译的应用程序,它抱怨的
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]
)
什么是您的安装文件是什么样子? GUI2Exe为您创建一个。我会推荐发布它。你有没有尝试将这些库中的一个添加到你的包含列表中? –
我上面编辑过。另外,Mike,你的博客太棒了! – mcfly