I don't think the modules are actually imported twice. The entry is just doubled;that's all
On 7 August 2012 18:48, Roy Smith <r...@panix.com> wrote: > I've been tracking down some weird import problems we've been having with > django. Our settings.py file is getting imported twice. It has some > non-idempotent code in it, and we blow up on the second import. > > I thought modules could not get imported twice. The first time they get > imported, they're cached, and the second import just gets you a reference > to the > original. Playing around, however, I see that it's possible to import a > module > twice if you refer to it by different names. Here's a small-ish test case > which > demonstrates what I'm talking about (python 2.6.5): > > In directory /home/roy/play/import/foo, I've got: > > __init__.py (empty file) > try.py > broken.py > > > $ cat broken.py > print __file__ > > > $ cat try.py > import broken > import foo.broken > > import sys > for m in sys.modules.items(): > if m[0].endswith('broken'): > print m > > > And when I run try.py (with foo as the current directory): > > $ PYTHONPATH=/home/roy/play/import python try.py > /home/roy/play/import/foo/broken.pyc > /home/roy/play/import/foo/broken.pyc > ('broken', <module 'broken' from '/home/roy/play/import/foo/broken.pyc'>) > ('foo.broken', <module 'foo.broken' from > '/home/roy/play/import/foo/broken.pyc'>) > > > So, it appears that you *can* import a module twice, if you refer to it by > different names! This is surprising. It means that having non-idempotent > code > which is executed at import time is a Bad Thing. > > It also means that you could have multiple copies of a module's global > namespace, depending on how your users imported the module. Which is kind > of > mind-blowing. > -- > http://mail.python.org/mailman/listinfo/python-list >
-- http://mail.python.org/mailman/listinfo/python-list