utils: imp module is removed in Python 3.12 - get is_frozen() from _imp stable
authorMads Kiilerich <mads@kiilerich.com>
Tue, 27 Jun 2023 13:05:03 +0200
branchstable
changeset 50756 847f703a4d13
parent 50755 b9eb65a1ec14
child 50757 19108906abaf
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.
mercurial/utils/resourceutil.py
--- 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
     )