在 10.5.8 上从 Macports 安装的 Python 3.1 - 搁置错误(是否有错误?)

标签 python macos macports shelve

我正在从 macports 运行 python 3.1.4,并且我尝试在此处使用 shelve 模块。我可以在另一个开发人员上成功使用它。机器(不同的操作系统等),所以我不确定我可能做错了什么......

如有任何想法或建议,我们将不胜感激!

这是错误 “dbm.error:无法确定数据库类型” (我搜索了错误消息,但没有找到任何信息 - 我什至尝试强制 protocl=2 以查看是否有帮助,但没有)

这是交互式 session :

Python 3.1.4 (default, Oct  7 2011, 15:58:53) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
>>> import shelve
>>> a = [1, 2, 3]
>>> locker = shelve.open('myshelf',protocol=2)
>>> locker['a'] = a
>>> locker.close()
>>> exit()


Python 3.1.4 (default, Oct  7 2011, 15:58:53) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
>>> import shelve
>>> locker = shelve.open('myshelf',protocol=2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shelve.py", line 231, in open
    return DbfilenameShelf(filename, flag, protocol, writeback)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shelve.py", line 215, in __init__
    Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/dbm/__init__.py", line 84, in open
    raise error[0]("db type could not be determined")
dbm.error: db type could not be determined

最佳答案

这看起来像是 MacPorts 端口或 Python 3 中的错误。对我来说,您的示例适用于当前的 MacPorts Python 2.7.2,但不适用于当前的 MacPorts Python 3.2.2,与您报告的方式相同。 MacPorts 自动构建并包含 gdbm 作为 Python 3 ports 的数据库管理器;对于 Python 2,它包括 Berkeley DB4.6gdbm。看起来 MacPorts 2.7.2 使用 db46 并且可以工作,但 3.2.2 使用 gdbm 失败;大概 MacPorts 3.1 端口是类似的。这应该进一步调查。

更新:如果您使用的是最新的 MacPorts 安装,这可能是 http://bugs.python.org/issue13007 中报告的问题。看起来有一个修复程序可以支持最新的 gdbm 1.9 及更高版本 - 当前的 MacPorts 版本是 1.9.1。该修复是在 Python 3.2.2 发布后应用的(将在 3.2.3 中); MacPorts 人员应该将其反向移植到他们的 Python 端口。

关于在 10.5.8 上从 Macports 安装的 Python 3.1 - 搁置错误(是否有错误?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075324/

相关文章:

python - 无法使用 Windows (7) 命令提示符运行 pylint

MySQL 连接只能通过命令行工作

python - opencv python 操作系统

Mysql:在 macOS 上安装后立即拒绝用户 'root' @'localhost' 的访问

javascript - 带有下划线的 webScriptNameForSelector 和 javascript 方法

php - 重新安装 PHP Pear

python - 计算Python中分配给某个值的变量数量

python - 如何下载 aiotp 的早期版本?

javascript - 来自nodeJS脚本的python shell向nodejs返回相同的值

macos - 星舰主题符号在 VSCode 终端中未正确显示