[Python-Dev] is this the fault of import_fresh_module or pickle?

R. David Murray rdmurray at bitdance.com
Tue Jan 8 17:37:59 CET 2013


On 2013年1月08日 17:05:50 +0100, Stefan Krah <stefan at bytereef.org> wrote:
> 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.

Handling this case is why having a context-manager form of
import_fresh_module was suggested earlier in this meta-thread. At
least, I think that would solve it, I haven't tried it :)
--David


More information about the Python-Dev mailing list

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