Python 3.1 установлен из Macports на 10.5.8 - ошибка полки (ошибка или нет?) - PullRequest
1 голос
/ 10 ноября 2011

Я запускаю python 3.1.4 из macports и пытаюсь использовать модуль shelve здесь.Я могу успешно использовать его на другом устройстве.машина (другая ОС и т. д.), поэтому я не уверен, что я могу делать неправильно ...

Любые мысли или предложения будут с благодарностью!

Вот ошибка "ДБМ.ошибка: тип БД не может быть определен "(я искал сообщение об ошибке, но не нашел никакой информации - я даже пытался заставить protocl = 2 посмотреть, может ли это помочь, но это не помогло)

Вот интерактивныйсеанс:

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

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Это похоже на ошибку в порте MacPorts или в Python 3. Для меня ваш пример работает с текущим MacPorts Python 2.7.2, но не работает с текущим MacPorts Python 3.2.2 так же, как вы сообщили , MacPorts автоматически создает и включает gdbm в качестве менеджера базы данных для портов Python 3; для Python 2 он включает в себя как Berkeley DB4.6, так и gdbm. Похоже, что 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.

0 голосов
/ 10 ноября 2011

Используйте MacPorts или Homebrew для установки ndbm . Полка с использованием этого для создания базы данных. При открытии файла позже, shelve вызовет dbm.whichdb и успешно распознает файл.

...