2
0
Эх сурвалжийг харах

dist: Fix inability to pick up nested hidden modules

rdb 1 долоо хоног өмнө
parent
commit
8fb23c5599

+ 8 - 1
direct/src/dist/FreezeTool.py

@@ -1249,8 +1249,12 @@ class Freezer:
                 pass
                 pass
 
 
         # Check if any new modules we found have "hidden" imports
         # Check if any new modules we found have "hidden" imports
-        for origName in list(self.mf.modules.keys()):
+        checkHiddenImports = set(self.mf.modules.keys())
+        while checkHiddenImports:
+            origName = next(iter(checkHiddenImports))
+            checkHiddenImports.discard(origName)
             hidden = self.hiddenImports.get(origName, [])
             hidden = self.hiddenImports.get(origName, [])
+            preModules = frozenset(self.mf.modules.keys())
             for modname in hidden:
             for modname in hidden:
                 if modname.endswith('.*'):
                 if modname.endswith('.*'):
                     mdefs = self._gatherSubmodules(modname, implicit = True)
                     mdefs = self._gatherSubmodules(modname, implicit = True)
@@ -1264,6 +1268,9 @@ class Freezer:
                         self.__loadModule(self.ModuleDef(modname, implicit = True))
                         self.__loadModule(self.ModuleDef(modname, implicit = True))
                     except ImportError:
                     except ImportError:
                         pass
                         pass
+            addedModules = set(self.mf.modules.keys())
+            addedModules -= preModules
+            checkHiddenImports |= addedModules
 
 
         # Special case for sysconfig, which depends on a platform-specific
         # Special case for sysconfig, which depends on a platform-specific
         # sysconfigdata module on POSIX systems.
         # sysconfigdata module on POSIX systems.