When running the test suite sequentially (as is done as part of the release process), an interaction between test_imp, test_importlib and subinterpreters is causing test_pickle and test_pickletools to fail. The easiest reproducer:: ``` % ./python -m test test_imp test_importlib test_pickletools 0:00:00 load avg: 0.22 Run tests sequentially 0:00:00 load avg: 0.22 [1/3] test_imp 0:00:00 load avg: 0.22 [2/3] test_importlib 0:00:03 load avg: 0.22 [3/3] test_pickletools test test_pickletools failed -- Traceback (most recent call last): File "Lib/test/pickletester.py", line 1989, in test_builtin_types s = self.dumps(t, proto) ^^^^^^^^^^^^^^^^^^^^ File "Lib/test/test_pickletools.py", line 11, in dumps return pickletools.optimize(pickle.dumps(arg, proto, **kwargs)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _pickle.PicklingError: Can't pickle <class 'importlib._bootstrap.BuiltinImporter'>: it's not the same object as importlib._bootstrap.BuiltinImporter test_pickletools failed (1 error) == Tests result: FAILURE == 2 tests OK. 1 test failed: test_pickletools Total duration: 4.2 sec Tests result: FAILURE ``` The failure happens in both test_pickle and test_pickletools (test_pickletools's traceback is more obvious), after _in the same process_ running both test_imp and either test_import or test_importlib. Disabling `test_imp.ImportTests.test_create_builtin_subinterp()` makes the tests pass. (This was happening before #102982 as well as after it, so I don't think it is involved here.) I expect this is an unintentional side-effect of the test, but this was _not_ happening in the 3.12.0a6 release, and as far as I can tell the relevant tests haven't changed since before a6. I'm delaying the 3.12.0a7 release until it's clear this isn't a fundamental problem with subinterpreters. <!-- gh-linked-prs --> ### Linked PRs * gh-104186 * gh-104226 * gh-104345 <!-- /gh-linked-prs -->