pytester: workaround issue causing spawn to crash or hang

In pytester tests, pytest stashes & restores the sys.modules for each
test. So if the test imports a new module, it is initialized anew each
time.

Turns out the readline module isn't multi-init safe, which causes
pytester.spawn to crash or hang. So preserve it as a workaround.
This commit is contained in:
Ran Benita 2020-10-25 03:44:04 +02:00
parent 897f151e94
commit ca82214444
2 changed files with 5 additions and 1 deletions

View File

@ -0,0 +1 @@
Fixed a crash or hang in ``pytester.spawn`` when the ``readline`` module is involved.

View File

@ -707,8 +707,11 @@ class Pytester:
# Some zope modules used by twisted-related tests keep internal state
# and can't be deleted; we had some trouble in the past with
# `zope.interface` for example.
#
# Preserve readline due to https://bugs.python.org/issue41033.
# pexpect issues a SIGWINCH.
def preserve_module(name):
return name.startswith("zope")
return name.startswith(("zope", "readline"))
return SysModulesSnapshot(preserve=preserve_module)