Kent Johnson schreef:
On Tue, May 12, 2009 at 3:59 AM, Timo <[email protected]> wrote:
Alan Gauld schreef:
"Timo" <[email protected]> wrote

I have an issue with the Shelve module. It works great for my needs, the
only problem is that a file made with Shelve isn't interchangable between
different computers.
I thought it would be.
What kind of computers are you having issues with?
And what kind of issues?
Currently only tested between Ubuntu and Windows on the same computer.
This is the end of the traceback:
bsddb.db.DBInvalidArgError: (22, 'Invalid argument -- </path/to/shelvefile>:
unsupported hash version: 9')

shelve relies on the anydbm module for storage. anydbm may use any one
of several actual database implementations (dbhash, gdbm, dbm or
dumbdbm) depending on what is available. I guess you have different
modules available on the two machines. You can find out which module
is being used like this:

In [7]: import anydbm
In [8]: anydbm._defaultmod
Out[8]: <module 'dbhash' from
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/dbhash.pyc'>
I get the same result, only I have Python 2.6 on my Ubuntu installation and 2.5 on Windows. Maybe that is the problem. But still, then the user can't upgrade without breaking their database.

Also tried:
>>> import whichdb
>>> whichdb.whichdb('mydb.db')
'dbhash'

Same result on both.

Timo

You could force the use of a common db module by opening the file
explicitly. For example, to use dumbdbm, which is slow, simple and
guaranteed to be available, something like this (untested) should
work:

import dumbdbm
from shelve import Shelf

shelf = Shelf(dumbdbm.open('myfile', 'c'))

Kent

_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to