"Steve Holden" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > bambam wrote: >> import works in the main section of the module, but does >> not work as I hoped when run inside a function. >> >> That is, the modules import correctly, but are not visible to >> the enclosing (global) scope. >> >> Questions: >> (1) Where can I read an explanation of this? >> (2) Is there a work around? >> >> BTW, sys.modules("filename") shows that the module is >> loaded, I just don't know how to use it when loaded that >> way. Also, if I import again at the global scope, the module >> name becomes available. >> > There's not much wrong with doing this, since it gives you the best of > both worlds. But you mean sys.modules["filename"], don't you? > >>>>> def gim(): >> ... exec "import gamel" >> ... >>>>> gim() >>>>> sys.modules["gamel"] >> <module 'gamel' from 'c:\gamel.pyc'> >>>>> gamel >> NameError: name 'gamel' is not defined >>>>> exec "import gamel" >>>>> gamel >> <module 'gamel' from 'c:\gamel.pyc'> > Whoa there! There's a lot of difference between "importing a module inside > a function" and "executing an import statement inside a function". > > If you want to do dynamic imports then the __import__ function is what you > need. Trying to use exec like that is a bad idea unless you clearly > understand the relationship between the different namespaces involved. In > fact, trying to use exec at all is a bad idea until you understand Python > better, and even then it's not often a terrific idea. > > Think of exec more as a hack of last resort than the first tool to reach > for to solve a problem. > > regards > Steve > -- > Steve Holden +1 571 484 6266 +1 800 494 3119 > Holden Web LLC/Ltd http://www.holdenweb.com > Skype: holdenweb http://del.icio.us/steve.holden > --------------- Asciimercial ------------------ > Get on the web: Blog, lens and tag the Internet > Many services currently offer free registration > ----------- Thank You for Reading ------------- >
Yes, sys.modules["filename"], unfortunately, same mistake made already 4 or 5 times before I typed this, and still hadn't learned...many years working in an environment where the distinction was not important. Sorry. def gim(self): for gamel in self.gamel_list: __import__(gamel['file']) Works as hoped for. I did a web search for 'dynamic import' and the only examples I found used exec. Thanks Steve. -- http://mail.python.org/mailman/listinfo/python-list