Pext: new and improved AppImage


This weekend, among other things, I was working on improving the Pext AppImage. Sylvia and I were spending quite some hours on making the Pext AppImages smaller, more efficient and provide improved desktop integration. Also, AppImages are now built using linuxdeploy, the universal AppImage creation tool suite, using the conda plugin to set up everything Python related. That plugin was actually inspired by the experiences I made during all the months it took to make the first AppImage build script.

What’s new?

We managed to fix a couple of issues in both Pext and different AppImage projects. As Sylvia always says, “Pext is good at breaking AppImage stuff”. This time, some of my code could strike back. With the help of my build script, a few minor issues in the Pext code were discovered (for instance, in setup.py).

I had started to write some code during the last week, and we could already merge a few improvements back then, but due to the various issues we’ve found afterwards, it took us the whole weekend to finish the new script and make everything work as intended.

We’re quite happy with the new AppImage build script. The new AppImages are way smaller, there’s less code for Pext to maintain, and we have a big, complex project that tests our conda plugin and might find issues and contribute some fixes. So: win-win, sort of.

Original build script

Original build script

Original build script, miniconda grew extremely in size

Original build script, miniconda grew extremely in size

Way smaller, new AppImage built with linuxdeploy and linuxdeploy-plugin-conda

Way smaller, new AppImage built with linuxdeploy and linuxdeploy-plugin-conda

If you have never heard of Pext before: it’s a little hard to explain. But you should try it, especially since there’s an AppImage. Download the latest releases on pext.io or get a beta release directly from GitHub. Or you simply fetch the update with AppImageUpdate.

Note for self: Pick up work on python-appimageupdate again so that Sylvia can add self-updating to Pext.

Background

In 2017, I started my first attempt to create an AppImage for the fairly complex Python app Pext. After having joined the AppImage project, I thought it might be a good idea to help Sylvia, whom I’ve known for quite some time already, to bundle her Python app as an AppImage. It seemed like an easy task at first, but turned out to be quite complex. Nobody had ever been documenting a reliable and universal way to create Python based AppImages. Therefore, it took us around 9 months until the first AppImage could be released. We’ve learned a lot during the process, and ended up with a not-so-long script that did the job quite well since.

In 2018, with all that experience and after having started the linuxdeploy project, I decided it was time to rewrite the Pext build script using the conda plugin which I wrote for Python based software based on the Pext AppImage build script. After two weeks, fixing lots of issues on the way, we’ve come up with the new solution described above.

I hope it will help future AppImage maintainers to bundle their Python software without as much hassle as we’ve had with Pext’s.

See also