Disable the compilation of the built-in _abc module. For example, on Python 3.7 apply the following patch:
diff --git a/Modules/Setup.dist b/Modules/Setup.dist
index 8cc6bf0540..4015527b32 100644
--- a/Modules/Setup.dist
+++ b/Modules/Setup.dist
@@ -114,7 +114,7 @@ _weakref _weakref.c # weak references
_functools -DPy_BUILD_CORE _functoolsmodule.c # Tools for working with functions and callable objects
_operator _operator.c # operator.add() and similar goodies
_collections _collectionsmodule.c # Container types
-_abc _abc.c # Abstract base classes
+#_abc _abc.c # Abstract base classes
itertools itertoolsmodule.c # Functions creating iterators for efficient looping
atexit atexitmodule.c # Register functions to be run at interpreter-shutdown
_signal -DPy_BUILD_CORE signalmodule.c
@@ -363,7 +363,8 @@ xxsubtype xxsubtype.c
# Uncommenting the following line tells makesetup that all following modules
# are not built (see above for more detail).
#
-#*disabled*
+*disabled*
#
#_sqlite3 _tkinter _curses pyexpat
#_codecs_jp _codecs_kr _codecs_tw unicodedata
+_abc
Recompile Python, check:
$ ./python -c 'import _abc'
ModuleNotFoundError: No module named '_abc'
Run:
$ ./python -u -m test -R 3:3 test_functools -m test_mro_conflicts
Error without _abc:
test test_functools crashed -- Traceback (most recent call last):
File "/home/vstinner/prog/python/3.7/Lib/test/libregrtest/runtest.py", line 180, in runtest_inner
refleak = dash_R(the_module, test, test_runner, ns.huntrleaks)
File "/home/vstinner/prog/python/3.7/Lib/test/libregrtest/refleak.py", line 71, in dash_R
abcs)
File "/home/vstinner/prog/python/3.7/Lib/test/libregrtest/refleak.py", line 148, in dash_R_cleanup
obj.register(ref())
File "/home/vstinner/prog/python/3.7/Lib/_py_abc.py", line 60, in register
raise TypeError("Can only register classes")
TypeError: Can only register classes
With built-in _abc module, regrtest is fine.
The problem comes from pure-Python reimplementation of abc._get_dump() in Lib/test/libregrtest/refleak.py:
def _get_dump(cls):
# For legacy Python version
return (cls._abc_registry, cls._abc_cache,
cls._abc_negative_cache, cls._abc_negative_cache_version)
The first item tuple must be a set of weak references. Currently, it's a weak set of strong references.
Attached PR fix the issue.
|