[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

AltStyle によって変換されたページ (->オリジナル) /