シェルフモジュールの使用を伴うアプリケーションをフリーズしようとしています。それをフリーズするために、私はGUI2EXE pythonコードを使用し、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を試しました(うまくビルドできませんでした)。現在、(PersistentDictを使用して)pdictを見つけました。これは、アプリケーションをフリーズするとうまく機能します。ただし、棚の方が速いと思います。可能であれば棚を機能させたい...
私のセットアップスクリプト:
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]
)