[Python-Dev] is this the fault of import_fresh_module or pickle? (original) (raw)

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 importfreshmodule for the C module:

from test.support import importfreshmodule import pickle C = importfreshmodule('xml.etree.ElementTree', fresh=['elementtree']) P = importfreshmodule('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 importfreshmodule 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