Le lundi 28 août 2006 22:15, Christian Convey a écrit : > I've looked at using imp.load_source() or imp.load_module(), but it looks > to me like all of these polute the global namespace with the names of the > modules I'm importing.
Really ? They don't. (there are some quirks in my little function) In [1]: def importer(*mods): ...: import imp ...: from os import path as _p ...: for i in mods : ...: n, p = _p.splitext(_p.split(i)[1])[0], _p.dirname(i) ...: print imp.load_module(n,*imp.find_module(n, [p])) ...: ...: In [2]: importer('temp', 'temp.py', 'test', 'test/', './test', 'test/__init__.py', 'test/mod', 'test/mod.py') <module 'temp' from 'temp.pyc'> <module 'temp' from 'temp.pyc'> <module 'test' from 'test/__init__.py'> <module '' from 'test/__init__.pyc'> <--- here <module 'test' from './test/__init__.pyc'> <module '__init__' from 'test/__init__.pyc'> <--- and here <module 'mod' from 'test/mod.py'> <module 'mod' from 'test/mod.pyc'> In [3]: temp ... NameError: name 'temp' is not defined Neither do a simple import in a function scope : In [14]: def f() : import temp ....: In [15]: f() In [16]: temp ... NameError: name 'temp' is not defined But maybe you are worried by the sys.modules repository ? I don't see why it could be a problem, but if this is the case you can't use import machinery, You could go that way : #temp.py A=0 def test_execfile() : print A In [1]: d={} In [2]: execfile('temp.py',d, d) In [3]: d['test_execfile'] Out[3]: <function test_execfile at 0xa7587dbc> In [4]: d['test_execfile']() 0 In [5]: d['A'] = 1 In [6]: d['test_execfile']() 1 -- _____________ Maric Michaud _____________ Aristote - www.aristote.info 3 place des tapis 69004 Lyon Tel: +33 426 880 097 -- http://mail.python.org/mailman/listinfo/python-list