<div dir="ltr">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 <i>need</i> to always be true, but <i>should</i> nevertheless be safe if your users are all using CPython and not manually messing with the generated pickle data for some reason.<div><br></div><div>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 <font face="monospace">pickle.loads()</font> on untrusted user data files.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 26, 2021 at 8:58 AM Florian Bruhin <<a href="mailto:me@the-compiler.org">me@the-compiler.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Tue, Oct 26, 2021 at 11:47:40AM +0200, Florian Bruhin wrote:<br>
> The harder way is to somehow coerce pickle into giving you the "raw"<br>
> data without the PyQt object involved...<br>
<br>
I just learned there's 'pickletools' in the stdlib:<br>
<a href="https://docs.python.org/3/library/pickletools.html" rel="noreferrer" target="_blank">https://docs.python.org/3/library/pickletools.html</a><br>
<br>
Using that, you could inspect the pickle manually and pick the data out<br>
of it somehow. Given how pickles are structured, not exactly<br>
straightfoward either, though.<br>
<br>
Florian<br>
<br>
-- <br>
            <a href="mailto:me@the-compiler.org" target="_blank">me@the-compiler.org</a> | <a href="https://www.qutebrowser.org" rel="noreferrer" target="_blank">https://www.qutebrowser.org</a> <br>
       <a href="https://bruhin.software/" rel="noreferrer" target="_blank">https://bruhin.software/</a> | <a href="https://github.com/sponsors/The-Compiler/" rel="noreferrer" target="_blank">https://github.com/sponsors/The-Compiler/</a><br>
       GPG: 916E B0C8 FD55 A072 | <a href="https://the-compiler.org/pubkey.asc" rel="noreferrer" target="_blank">https://the-compiler.org/pubkey.asc</a><br>
             I love long mails! | <a href="https://email.is-not-s.ms/" rel="noreferrer" target="_blank">https://email.is-not-s.ms/</a><br>
</blockquote></div>