Re: Duplicating Modules
Available news archives: comp.lang.tcl - comp.lang.python - comp.security.firewalls - sci.crypt - comp.lang.php - comp.lang.javascript
Google
 
Web news.hping.org


comp.lang.python archive

Re: Duplicating Modules

From: Dave Benjamin <ramen@lackingtalent.com>
Date: Fri Sep 30 2005 - 22:22:51 CEST

Misto . wrote:
> Hi folks!
>
> Short:
>
> There is a way to dumplicate a module ?

Here's one way... it doesn't quite work with modules inside of packages,
unfortunately, but it does avoid defeating module caching and tries to
keep sys.modules in a predictable state. I don't know what the
thread-safety implications are for this sort of trickery with sys.modules.

def import_as(newname, oldname):
     """Import a module under a different name.

     This procedure always returns a brand new module, even if
     the original module has always been imported.

     Example::

         try:
             # Reuse this module if it's already been imported
             # as "mymath".
             import mymath
         except ImportError:
             # "mymath" has not yet been imported.
             # Import and customize it.
             mymath = import_as('mymath', 'math')
             mymath.phi = (mymath.sqrt(5.0) - 1.0) / 2.0

     The above code will not reinitialize "mymath" if it executes
     a second time (ie. if the module containing this code is
     reloaded). Whether or not "math" has already been imported,
     it will always be a different object than "mymath".
     """

     import sys
     if sys.modules.has_key(oldname):
         tmp = sys.modules[oldname]
         del sys.modules[oldname]
         result = __import__(oldname)
         sys.modules[newname] = sys.modules[oldname]
         sys.modules[oldname] = tmp
     else:
         result = __import__(oldname)
         sys.modules[newname] = sys.modules[oldname]
         del sys.modules[oldname]
     return result

Dave
Received on Sat Oct 15 04:01:07 2005