Python架。。。bsddb已弃用。。。如何让shelve使用另一个数据库?

2024-10-01 09:39:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在OSX上用Python2.7.2开发的应用程序。 我使用模块shelve,在mac上似乎默认为bsddb。 由于模块bsddb不存在,也不在ActiveState的包管理器(pypm)中,所以该程序无法在带有ActiveState python2.7的windows7计算机上运行。ActiveState的文档显示在v2.6中已弃用。 我想它会尝试bdddb,因为创建DB的osx python默认为bsddb。 当我删除shelve数据库并在Windows上运行它时,它很乐意使用其他一些底层数据库。Mac的Python也很高兴。在

所以我认为我应该强制使用shelve的非bdsdb后端。就像gdbm模块。 但我不知道怎么做。在


Tags: 模块文档程序数据库应用程序管理器mac计算机
2条回答

我好像问错了问题。在构建windowsexe时,py2exe没有包含dbm模块(它无法推断出这种依赖关系),因此在运行时python绝望地试图找到bdbm模块。在

这个剧本设置.py包含一个模块,该模块使py2exe版本的行为类似于正常运行的版本。它包括一个dbm克隆模块(我只存储十个简单的字典,所以基本的dumbdbm模块就足够了

from distutils.core import setup
import py2exe, sys, os
from glob import glob

sys.argv.append('py2exe')
data_files = [("Microsoft.VC90.CRT", glob(r'C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*'))]
setup(
    data_files=data_files,
    windows = ["cashflowSim.py"],
    options={
       "py2exe":{"includes":["dumbdbm"]}},
       zipfile = None
)

您可以在调用shelve.open之前设置anydbm._defaultmod来设置创建的数据库的类型。在

这适用于Python2.6(也可能适用于2.7?),但由于anydbm._defaultmod是一个私有变量,请注意这是一次黑客攻击。在

anydbm._defaultmod=__import__('gdbm')

例如:

^{pr2}$

相关问题 更多 >