For a few days now my Quod Libet has been broken, showing only empty space instead of information panes.
I investigated halfheartedly, but did not find the cause with quick googling. Today I decided to change that. I document my path here, because I did not yet write about how I actually tackle problems like these - and I think I would have profited from having a writeup like this when I started, instead of having to learn it by trial-and-error.
Update: Quodlibet 2.6.3 is now in the Gentoo portage tree - using my ebuild. The update works seamlessly. So to get your Quodlibet 2.5 running again, just call
emerge =media-sound/quodlibet-2.6.3 =media-plugins/quodlibet-plugins-2.6.3. Happy Hacking!
Update: I got a second reply in the bug tracker which solved the plugins problem: I had user-plugins which require Quod Libet 3. Solution:
mv ~/.quodlibet/plugins ~/.quodlibet/plugins.for-ql3. Quod Libet works completely again.
As starting point I installed the Quod Libet plugins (media-libs/quodlibet-plugins), thinking that the separation between plugins and mediaplayer might not be perfect. That did not fix the problem, but a look at the plugin listing gave me nice backtraces:
And these actually show the reason for the breakage: Cannot import GTK:
Traceback (most recent call last): File "/home/arne/.quodlibet/plugins/songsmenu/albumart.py", line 51, in <module> from gi.repository import Gtk, Pango, GLib, Gdk, GdkPixbuf File "/usr/lib64/python2.7/site-packages/gi/__init__.py", line 27, in <module> from ._gi import _API, Repository ImportError: cannot import name _API
Let’s look which package this file belongs to:
equery belongs /usr/lib64/python2.7/site-packages/gi/__init__.py
* Searching for /usr/lib64/python2.7/site-packages/gi/__init__.py ... dev-python/pygobject-3.8.3 (/usr/lib64/python2.7/site-packages/gi/__init__.py)
So I finally have an answer: pygobject changed the API. Can’t be hard to fix… (a realization process follows)
qlop -l pygobject
... Thu Dec 5 00:26:27 2013 >>> dev-python/pygobject-3.8.3
echo =dev-python/pygobject-3.8.3 >> /usr/portage/package.mask emerge -u pygobject
/usr/lib64/python2.7/site-packages/quodlibet/qltk/songlist.py:44: GtkWarning: Unable to locate theme engine in module_path: "clearlooks", _label = gtk.Label().create_pango_layout("")
In the bug report at Quod Libet I got a reply: Known issue with quodlibet 2.5 “which triggered a bug in a recent pygtk release, resulting in lists not showing”. The plugins seem to be unrelated. Solution to my immediate problem: Update to 2.5.1. That’s not yet in gentoo, but this is easy to fix:
cd /usr/portage/media-sound/ # create the category in my local portage overlay, defined as # PORTAGE_OVERLAY=/usr/local/portage in /etc/make.conf mkdir -p /usr/local/portage/media-sound # copy over the quodlibet directory, keeping the permissiong with -p cp -rp quodlibet /usr/local/portage/media-sound # most times it is enough to simply rename the ebuild to the new version cd /usr/local/portage/media-sound/quodlibet mv quodlibet-2.5.ebuild quodlibet-2.5.1.ebuild # now prepare all the metadata portage needs - this requires # app-portage/gentoolkit ebuild quodlibet-2.5.1.ebuild digest compile # now it's prepared for the package manager. Just update it as usual: emerge -u quodlibet
I wrote the solution in the Gentoo bug report. I should also state, that the gentoo package for Quod Libet is generally out of date (releases 2.6.3 and 3.0.2 are not yet in the tree).
Quod Libet works again.
As soon as the ebuild in the portage tree is renamed, Quod Libet should work again for all Gentoo users.
The plugins still need to be fixed, but I’ll worry about that later.
Solving the core problem took me some time, but it wasn’t really complicated. The part of the solution process which got me forward boils down to:
And that’s it: To get something working again, check the bug trackers, report bugs and help synchronizing bug tracker info.
The European Copyright directive threatens online communication in Europe.
But thanks to massive shared action earlier this year, the European parliament can still prevent the problems. For each of the articles there are proposals which fix them. The parliamentarians (MEPs) just have to vote for them. And since they are under massive pressure from large media companies, that went as far as defaming those who took action as fake people, the MEPs need to hear your voice to know that your are real.
If you care about the future of the Internet in the EU, please Call your MEPs.