[Python-Dev] test___all__ polluting sys.modules?

Nick Coghlan ncoghlan at gmail.com
Sun Dec 30 15:38:47 CET 2012

On Mon, Dec 31, 2012 at 12:19 AM, Eli Bendersky <eliben at gmail.com> wrote:
> On Sun, Dec 30, 2012 at 5:54 AM, Stefan Krah <stefan at bytereef.org> wrote:
>> Eli Bendersky <eliben at gmail.com> wrote:
>> > Yes, this is the solution currently used in test_xml_etree. However,
>> > once
>> > pickling tests are added things stop working. Pickle uses __import__ to
>> > import
>> > the module a class belongs to, bypassing all such trickery. So if
>> > test___all__
>> > got _elementtree into sys.modules, pickle's __import__ finds it even if
>> > all the
>> > tests in test_xml_etree manage to ignore it for the Python version
>> > because they
>> > use import_fresh_module.
>> I ran into the same problem for test_decimal. The only thing that appears
>> to work is to set sys.modules['decimal'] explicitly before calling
>> dumps()/loads(). See:
>>    PythonAPItests.test_pickle()
>>    ContextAPItests.test_pickle()
> Yes, this seems to have done the trick. Thanks for the suggestion.

It may be worth offering a context manager/decorator equivalent to

> I'm still curious about the test-in-clean-env question though.

As Stefan noted, the main advantage we get is that sometimes the
failure to clean up properly is in the standard lib code rather than
the tests, and with complete isolation we'd be less likely to notice
the problem.

Once you combine that with the fact that rearchitecting regrtest to
work that way would be quite a bit of work, the motivation to make it
happen goes way down.

However, specifically spinning out the "import the world" tests like
test_pydoc and test___all__ to a separate process might be worth the


Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia

More information about the Python-Dev mailing list