[Python-Dev] is this the fault of import_fresh_module or pickle?
Stefan Krah
stefan at bytereef.org
Tue Jan 8 17:05:50 CET 2013
Eli Bendersky <eliben at gmail.com> wrote:
> Everything works fine. However, if I add import_fresh_module for the C module:
>
> from test.support import import_fresh_module
> import pickle
> C = import_fresh_module('xml.etree.ElementTree', fresh=['_elementtree'])
> P = import_fresh_module('xml.etree.ElementTree', blocked=['_elementtree'])
sys.modules still contains the C version at this point, so:
sys.modules['xml.etree.ElementTree'] = P
> tb = P.TreeBuilder()
> print(pickle.dumps(tb))
> This interaction only seems to happen with pickle. What's going on here? Can we
> somehow improve import_fresh_module to avoid this? Perhaps actually deleting
> previously imported modules with some special keyword flag?
pickle always looks up sys.modules['xml.etree.ElementTree']. Perhaps we
could improve something, but this requirement is rather special; personally
I'm okay with switching sys.modules explicitly in the tests, because that
reminds me of what pickle does.
Stefan Krah
More information about the Python-Dev
mailing list