2011-11-10 5 views
1

私はmacportsからpython 3.1.4を実行していますが、ここでshelveモジュールを使用しようとしています。私はそれを別の開発者でうまく使うことができます。マシン(別のOSなど)は、私が間違って何をしているのかわかりません...10.5.8のMacportsからPython 3.1がインストールされました - シェルブエラー(バグかどうか)

ご意見やご提案をいただければ幸いです!ここで

が エラーです: は(私は、エラーメッセージの検索が、何の情報を発見した「dbm.error DBの種類を判別することができませんでした」 - 私もそれが役立つかもしれないかどうかを確認するために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 

答えて

1

これはMacPortsポートまたはPython 3のバグのようです。私の場合、サンプルは現在のMacPorts Python 2.7.2で動作しますが、同じ方法で現在のMacPorts Python 3.2.2で失敗します報告。 MacPortsは自動的にビルドし、Python 3ポートのデータベースマネージャーとしてgdbmを組み込みます。 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ポートにバックポートする必要があります。

+0

私はこれについて問題を開いた:https://trac.macports.org/ticket/32010 –

+0

うーん、私は希望を持っていたこれは答えではないということでした。私がMacportsからインストールした後にPython 3.1で棚を試してみるのは初めての人だと信じるのは難しいですが、そこに行くと...

+0

一時的な回避について考えてみませんか?私は猿のパッチを当てることを望んでいませんが、私が棚の呼び出しにパラメータを渡して、少なくともこのロードブロックを過ぎ去らせる別のデータベースの使用を強制することができたら... –

0

使用MacPortsのか、自作がNDBMをインストールするには:それは

ここでは、対話型セッションだ)しませんでした。データベースを作成するためにそれを使用して棚。後でファイルを開くときにシェルブdbm.whichdbを呼び出し、ファイルを正常に認識します。

+0

Hmmmは、ndbmが犯人だと思われますが、macportsはpython 3.1のインストールにそれを入れます。 –

関連する問題