> In my pickling article [1] I looked at various ways to handle schema > evolution issues. When it came to module name and location changes, I > wrote the following: > > "A module name or location change is conceptually similar to a class > name change but must be handled quite differently. That's because the > module information is stored in the pickle but is not an attribute that > can be modified through the standard pickle interface. In fact, the > only way to change the module information is to perform a search and > replace operation on the actual pickle file itself. Exactly how you > would do this depends on your operating system and the tools you have > at your disposal. And obviously this is a situation where you will want > to back up your files in case you make a mistake. But the change should > be fairly straightforward and will work equally well with the binary > pickle format as with the text pickle format." > > I don't feel that this solution is entirely satisfactory and so I > thought I would ask (a bit late, I know) whether I am completely > correct in my assertions. If not, how else can this be handled. If so, > is there any chance of adding a better way to handle this situation? > > [1] http://www-106.ibm.com/developerworks/library/l-pypers.html I don't believe a search-and-replace on a pickle can ever be safe. In a binary pickle, it might interfere with length fields. And in either kind of pickle, you might accidentally replace data that happens to look like a module name. I'd suggest something else instead: when you have a pickle referencing module A which has since been renamed to B, create a dummy module A that contains "from B import *". Then load the pickle, and write it back again. The loading should work because a reference to class A.C will find it (as an alias for B.C); the storing should store it as B.C because that's the real name of class C. --Guido van Rossum (home page: http://www.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4