Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #12051
| Newsgroups | comp.lang.python |
|---|---|
| Date | 2011-08-22 12:14 -0700 |
| References | <ac0c2d71-d317-4f14-b389-459a5a6fae29@glegroupsg2000goo.googlegroups.com> <mailman.327.1314040013.27778.python-list@python.org> |
| Subject | Re: Error when deleting and reimporting subpackages |
| From | Matthew Brett <matthew.brett@gmail.com> |
| Message-ID | <mailman.328.1314040499.27778.python-list@python.org> (permalink) |
On Monday, August 22, 2011 12:06:44 PM UTC-7, Stephen Hansen wrote: > On 8/22/11 11:51 AM, Matthew Brett wrote: > > Hi, > > > > I recently ran into this behavior: > > > >>>> import sys > >>>> import apkg.subpkg > >>>> del sys.modules['apkg'] > >>>> import apkg.subpkg as subpkg > > Traceback (most recent call last): > > File "<stdin>", line 1, in <module> > > AttributeError: 'module' object has no attribute 'subpkg' > > > > where 'apkg' and 'subpkg' comprise empty __init__.py files to simplify the example. > > > > It appears then, that importing a subpackage, then deleting the containing package from sys.modules, orphans the subpackage in an unfixable state. > > > > I ran into this because the nose testing framework does exactly this kind of thing when loading test modules, causing some very confusing errors and failures. > > > > Is this behavior expected? > > Yes. Doing an import of "apkg.subpkg" results in more then just "test1" > being cached in sys.modules, and you're removing half of that so leaving > Python in a weird state. > > You also want to del sys.modules["apkg.subpkg"], then you'll be able to > re-import apkg.subpkg. I.e: > > Python 2.7.1 (r271:86882M, Nov 30 2010, 10:35:34) > [GCC 4.2.1 (Apple Inc. build 5664)] on darwin > Type "help", "copyright", "credits" or "license" for more information. > >>> import sys > >>> import test1.test2 > >>> del sys.modules['test1'] > >>> del sys.modules['test1.test2'] > >>> import test1.test2 as test2 > >>> Yes, sorry, I should have mentioned that I explored these kind of variations. I think I see that there isn't an obvious way for del sys.modules['apkg'] to know to delete or modify 'apkg.subpkg', because sys.modules is just a dict. However, I could imagine the import machinery being able to recognize that 'apkg.subpkg' is broken, and re-import it without error. Is that reasonable? Best, Matthew
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Error when deleting and reimporting subpackages Matthew Brett <matthew.brett@gmail.com> - 2011-08-22 11:51 -0700
Re: Error when deleting and reimporting subpackages Stephen Hansen <me+list/python@ixokai.io> - 2011-08-22 12:06 -0700
Re: Error when deleting and reimporting subpackages Matthew Brett <matthew.brett@gmail.com> - 2011-08-22 12:14 -0700
Re: Error when deleting and reimporting subpackages Matthew Brett <matthew.brett@gmail.com> - 2011-08-22 12:14 -0700
Re: Error when deleting and reimporting subpackages John Nagle <nagle@animats.com> - 2011-08-22 21:54 -0700
csiph-web