tow wrote: > On Aug 12, 9:56 am, Peter Otten <[EMAIL PROTECTED]> wrote: >> tow wrote: > >> > Basically, I had thought that import and imp.find_module used exactly >> > the same >> > search path, but the above example shows that at least in this >> > circumstance they >> > don't; import is picking up additional search paths from somewhere - >> > what am I missing? >> >> Grepping through the django source finds >> >> ./trunk/django/core/management/__init__.py: >> sys.path.append(os.path.join(project_directory, os.pardir)) > > Hmm. It turns out that that is indeed the issue, but in a way that > wasn't immediately obvious to me. Looking at it in more context: > > sys.path.append(os.path.join(project_directory, os.pardir)) > project_module = __import__(project_name, {}, {}, ['']) > sys.path.pop()
Ouch. > So, to answer my original question, the difference in search behaviour > between "import" and "imp.find_module" is that the former might not > look at sys.path at all if the module has already been loaded, while > the latter will only search on the current sys.path. > > Am I right? Yes. 'import' looks up the file in a cache, the sys.modules dictionary, before it falls back to the more costly alternatives. Peter -- http://mail.python.org/mailman/listinfo/python-list