utils: imp module is removed in Python 3.12 - get is_frozen() from _imp
imp has been deprecated for a long time, and has finally been removed in Python
3.12 .
The successor importlib is using the same internal _imp module as imp, but
doesn't expose it's is_frozen. Using the internal function directly seems like
the cleanest solution.
Another alternative to
imp.is_frozen("__main__")
is
sys.modules['__main__'].__spec__.origin == 'frozen'
but that seems even more internal and fragile.
--- a/mercurial/utils/resourceutil.py Tue Jun 27 22:31:44 2023 +0200
+++ b/mercurial/utils/resourceutil.py Tue Jun 27 13:05:03 2023 +0200
@@ -8,7 +8,7 @@
# GNU General Public License version 2 or any later version.
-import imp
+import _imp
import os
import sys
@@ -24,7 +24,7 @@
return (
pycompat.safehasattr(sys, "frozen") # new py2exe
or pycompat.safehasattr(sys, "importers") # old py2exe
- or imp.is_frozen("__main__") # tools/freeze
+ or _imp.is_frozen("__main__") # tools/freeze
)