3 ms·
With one exception -- whatever module is executing is named `__main__`, and if something else imports it by it's usual module name you'll get a duplicate copy.
by gavinsyancey 4y ago
With one exception -- whatever module is executing is named `__main__`, and if something else imports it by it's usual module name you'll get a duplicate copy.
- jwilk 4y agoExample: $ cat spam.py import sys print(f'__name__ = {__name__!r}') for (name, mod) in sys.modules.items(): try: if 'spam' not in (mod.__file__ or ''): continue except AttributeError: continue print(f'sys.modules[{name!r}] = {mod!r} @ 0x{id(mod):x}') import spam $ python3 -m spam __name__ = '__main__' sys.modules['__main__'] = <module 'spam' from '/home/jwilk/spam.py'> @ 0xf7d86ed8 __name__ = 'spam' sys.modules['__main__'] = <module 'spam' from '/home/jwilk/spam.py'> @ 0xf7d86ed8 sys.modules['spam'] = <module 'spam' from '/home/jwilk/spam.py'> @ 0xf7caef78 More generally, Python is happy to import the same file multiple times as long as the module name is different. For example, if there's eggs/bacon/spam.py and you add both "eggs" and "eggs/bacon" to sys.path, you will have two different modules imported after "import bacon.spam, spam".