PyQt from py27 to py38

RoadrunnerWMC roadrunnerwmc at
Tue Oct 26 16:06:46 BST 2021

The pickletools method is at least doable for relatively simple pickles --
I have an application that does exactly that because another developer made
the less-than-wise decision to store pickled PyQt4 objects in user data
files a long time ago, and now I have to support reading them forever. The
main downside is that you have to make a lot of assumptions about the
structure of the pickle data, ones which technically don't *need* to always
be true, but *should* nevertheless be safe if your users are all using
CPython and not manually messing with the generated pickle data for some

There is another option, too, which is to make a minimal fake "PyQt4"
interface (just a few nearly-empty class stubs) and have pickle load using
that. I chose the pickletools method because of the additional security
benefits of avoiding using pickle.loads() on untrusted user data files.

On Tue, Oct 26, 2021 at 8:58 AM Florian Bruhin <me at> wrote:

> On Tue, Oct 26, 2021 at 11:47:40AM +0200, Florian Bruhin wrote:
> > The harder way is to somehow coerce pickle into giving you the "raw"
> > data without the PyQt object involved...
> I just learned there's 'pickletools' in the stdlib:
> Using that, you could inspect the pickle manually and pick the data out
> of it somehow. Given how pickles are structured, not exactly
> straightfoward either, though.
> Florian
> --
>             me at |
> |
>        GPG: 916E B0C8 FD55 A072 |
>              I love long mails! |
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the PyQt mailing list