On Fri, Feb 21, 2020 at 6:56 PM Geoff Bache <geoff.ba...@gmail.com> wrote:
>
> I'm not sure I understand what you mean by "stick something" there. What did 
> you have in mind? I can't just put anything there or the importing will fail 
> anyhow.
> Also, setting the module back into there afterwards isn't possible unless 
> I've already imported it, and as mentioned I can't do that in practice.
>

The best object to put in there would be something that prints out all
__getattr__ calls. Something like this:

import sys
_this_module = sys.modules[__name__]
print("** Importing %s, module ID is %s **" % (__name__, id(_this_module)))
class Marker:
    def __getattr__(self, attr):
        print("** Sentinel imported, looking for %s.%s **" % (__name__, attr))
sys.modules[__name__] = Marker()

...
# rest of module goes here
...

sys.modules[__name__] = _this_module
del _this_module


Untested, might need some tweaks. The idea is that, if anything
imports the module while it's still running, it should either print
out a second "importing" line with a different ID, or it'll get the
sentinel object, and any use of it will trigger the message.

(Feel free to use the logging module instead of print, same difference.)

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to