After the last upgrade, exaile won't start anymore, using --debug gives the following information: 21:38:02,164:ERROR : Failed to open music DB. (xl.trax.trackdb) 21:38:02,164:DEBUG : Exception caught! Traceback (most recent call last): File "/usr/lib64/exaile/xl/trax/trackdb.py", line 169, in load_from_location protocol=common.PICKLE_PROTOCOL) File "/usr/lib64/python2.6/shelve.py", line 239, in open return DbfilenameShelf(filename, flag, protocol, writeback) File "/usr/lib64/python2.6/shelve.py", line 223, in __init__ Shelf.__init__(self, anydbm.open(filename, flag), protocol, writeback) File "/usr/lib64/python2.6/anydbm.py", line 82, in open mod = __import__(result) File "/usr/lib64/python2.6/dbhash.py", line 8, in <module> import bsddb ImportError: No module named bsddb (xl.trax.trackdb) Apparently, it missed bsddb, and can't read my music db without it. Adding 'dev-lang/python berkdb' to /etc/portage/package.use solved the problem; but maybe it would be a good idea to add the requirement to have python with bsddb to the exaile ebuild. The problem can also be solved by removing ~/.local/share/exaile, so I guess it's not a problem for new installations, but users who already have a DB get stuck. Reproducible: Always Steps to Reproduce:
Could you have changed berkdb useflag at some point, without afterwards emerging world with -N flag?
I'm pretty sure I haven't touched the berkdb useflag. I just found http://bugs.gentoo.org/show_bug.cgi?id=286972 (deprecation of bsddb in python); which I think explains the problem. I'm not sure about the best solution though. Removing the db is not nice, since I guess it would make me loose ratings, etc.
When you upgrade python, emerge log says: * "bsddb" module is out-of-date and no longer maintained inside dev-lang/python. It has * been additionally removed in Python 3. You should use external, still maintained "bsddb3" * module provided by dev-python/bsddb3 which supports both Python 2 and Python 3. Have you tried that?
I did install bsddb3, but that didn't help. I assume the code for exaile would have to be updated to use bsddb3 instead of bsddb first.
dev-lang/python-2.6.6-r1 (the current stable version in portage) ebuild has a "-berkdb" IUSE, but media-sound/exaile-0.3.2.0 (the current stable version in portage) needs it to get working the collection database. So..., in my opinion, the media-sound/exaile-0.3.2.0 ebuild should have dev-lang/python[berkdb] into RDEPEND variable.
Created attachment 263179 [details, diff] Adds dev-lang/python[berkdb] to the ebuild
Sounds like a good suggestion, handing it off to exaile maintainers
(In reply to comment #0) > After the last upgrade, exaile won't start anymore, using --debug gives the > following information: > File "/usr/lib64/python2.6/dbhash.py", line 8, in <module> > import bsddb > ImportError: No module named bsddb I can't find any reference to 'bsddb' in exaile. But file dbhash.py is part of dev-lang/python itself: $ qfile -v dbhash.py dev-lang/python-2.7.1-r1 (/usr/lib64/python2.7/dbhash.py) $ grep -i bsddb /usr/lib64/python2.7/dbhash.py """Provide a (g)dbm-compatible interface to bsddb.hashopen.""" import bsddb error = bsddb.error # Exported for anydbm return bsddb.hashopen(file, flag, mode) So it's a problem with dev-lang/python?
>=dev-lang/python-2.7.2_pre20110227[berkdb] prints the following warning: * "bsddb" module is out-of-date and no longer maintained inside dev-lang/python. * "bsddb" and "dbhash" modules have been additionally removed in Python 3. * You should use external, still maintained "bsddb3" module provided by dev-python/bsddb3, * which supports both Python 2 and Python 3. >=dev-lang/python-2.7.2_pre20110327[-berkdb] removes dbhash.py. Maybe there should be a warning telling people to migrate databases when migrating from dev-lang/python[berkdb] to dev-lang/python[-berkdb].
*** This bug has been marked as a duplicate of bug 372605 ***