mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-29 08:15:18 -04:00
dist: Work around stdlib bug causing erroneous missing module warnings
This commit is contained in:
parent
4b7c11059d
commit
030bdd1d34
70
direct/src/dist/FreezeTool.py
vendored
70
direct/src/dist/FreezeTool.py
vendored
@ -2428,6 +2428,76 @@ class PandaModuleFinder(modulefinder.ModuleFinder):
|
||||
self.msg(2, "ImportError:", str(msg))
|
||||
self._add_badmodule(fullname, caller)
|
||||
|
||||
def scan_code(self, co, m):
|
||||
code = co.co_code
|
||||
# This was renamed to scan_opcodes in Python 3.6
|
||||
if hasattr(self, 'scan_opcodes_25'):
|
||||
scanner = self.scan_opcodes_25
|
||||
else:
|
||||
scanner = self.scan_opcodes
|
||||
|
||||
for what, args in scanner(co):
|
||||
if what == "store":
|
||||
name, = args
|
||||
m.globalnames[name] = 1
|
||||
elif what in ("import", "absolute_import"):
|
||||
fromlist, name = args
|
||||
have_star = 0
|
||||
if fromlist is not None:
|
||||
if "*" in fromlist:
|
||||
have_star = 1
|
||||
fromlist = [f for f in fromlist if f != "*"]
|
||||
if what == "absolute_import": level = 0
|
||||
else: level = -1
|
||||
self._safe_import_hook(name, m, fromlist, level=level)
|
||||
if have_star:
|
||||
# We've encountered an "import *". If it is a Python module,
|
||||
# the code has already been parsed and we can suck out the
|
||||
# global names.
|
||||
mm = None
|
||||
if m.__path__:
|
||||
# At this point we don't know whether 'name' is a
|
||||
# submodule of 'm' or a global module. Let's just try
|
||||
# the full name first.
|
||||
mm = self.modules.get(m.__name__ + "." + name)
|
||||
if mm is None:
|
||||
mm = self.modules.get(name)
|
||||
if mm is not None:
|
||||
m.globalnames.update(mm.globalnames)
|
||||
m.starimports.update(mm.starimports)
|
||||
if mm.__code__ is None:
|
||||
m.starimports[name] = 1
|
||||
else:
|
||||
m.starimports[name] = 1
|
||||
elif what == "relative_import":
|
||||
level, fromlist, name = args
|
||||
parent = self.determine_parent(m, level=level)
|
||||
if name:
|
||||
self._safe_import_hook(name, m, fromlist, level=level)
|
||||
else:
|
||||
self._safe_import_hook(parent.__name__, None, fromlist, level=0)
|
||||
|
||||
if fromlist and "*" in fromlist:
|
||||
if name:
|
||||
mm = self.modules.get(parent.__name__ + "." + name)
|
||||
else:
|
||||
mm = self.modules.get(parent.__name__)
|
||||
|
||||
if mm is not None:
|
||||
m.globalnames.update(mm.globalnames)
|
||||
m.starimports.update(mm.starimports)
|
||||
if mm.__code__ is None:
|
||||
m.starimports[name] = 1
|
||||
else:
|
||||
m.starimports[name] = 1
|
||||
else:
|
||||
# We don't expect anything else from the generator.
|
||||
raise RuntimeError(what)
|
||||
|
||||
for c in co.co_consts:
|
||||
if isinstance(c, type(co)):
|
||||
self.scan_code(c, m)
|
||||
|
||||
def find_module(self, name, path=None, parent=None):
|
||||
""" Finds a module with the indicated name on the given search path
|
||||
(or self.path if None). Returns a tuple like (fp, path, stuff), where
|
||||
|
Loading…
x
Reference in New Issue
Block a user