Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.python
Importing modules
Peyman Askari
3/19/2010 10:48:00 AM
I want to write a function which imports modules the first time, and reloads them afterwards, but I am running into problems with global variables and exec. I will include a full script, but let me elaborate first.
Essentially what you need is
def import_or_reload():
"""assume we want to load or reload sys"""
if 'sys' in dir():
reload(sys)
else:
import sys
but this runs into the problem that sys is imported within the local scope of the function, so you insert a global statement
def import_or_reload2():
"""Add 'global sys'"""
global sys
if 'sys' in dir():
reload(sys)
else:
import sys
'sys' is still not in dir() as dir() pertains to the local scope of the function, but one can get around this by creating a local modules list and adding the imported modules to it
def import_or_reload3():
"""Add 'global modules'"""
global sys
global modules
if 'sys' in modules:
reload(sys)
else:
import sys
modules.append('sys')
now lets add a parameter to the function signature, so any module name can be passed as an argument and loaded
def import_or_reload4(module_name):
"""Add exec"""
exec 'global %s'%module_name
global modules
if module_name in modules:
exec 'reload(%s)'%module_name
else:
exec 'import %s'%module_name
exec 'modules.append(\'%s\')'%module_name
but this doesn't work as global does not cooperate with exec
is there a __reload__('X') function like there is an __import__(‘X’) function?
Also is there a better way to import modules at run time?
Cheers and here is the test script in case you can't access the attachment
def a():
global modules
global sys
import sys
modules.append('sys')
def b():
global modules
global sys
reload(sys)
def c(module_name):
global modules
exec 'global %s'%module_name
exec 'import %s'%module_name
modules.append(module_name)
def test():
global modules
global sys
#create the module list to contain all the modules
modules=[]
print 'originally dir() returns:'
print dir()
a()
print 'function a() properly imports the following module:'
print sys
print 'is %s in %s->%s'%('sys',modules,'sys' in modules)
b()
print 'function b() properly reloads the following module:'
print sys
print 'is %s still in %s->%s'%('sys',modules,'sys' in modules)
try:
c('os')
print 'function c() properly imports the following module:'
except:
print 'function c() failed to import module os'
print 'is %s in %s->%s'%('os',modules,'os' in modules)
try:
print os
print 'is %s still in %s->%s'%('os',modules,'os' in modules)
except:
print 'os was loaded, but is not visible outside of the scope of c()'
--- On Fri, 3/19/10, python-list-request@python.org <python-list-request@python.org> wrote:
From: python-list-request@python.org <python-list-request@python.org>
Subject: Python-list Digest, Vol 78, Issue 192
To: python-list@python.org
Received: Friday, March 19, 2010, 7:05 AM
Send Python-list mailing list submissions to
python-list@python.org
To subscribe or unsubscribe via the World Wide Web, visit
http://mail.python.org/mailman/listinfo/p...
or, via email, send a message with subject or body 'help' to
python-list-request@python.org
You can reach the person managing the list at
python-list-owner@python.org
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Python-list digest..."
Today's Topics:
1. Re: import antigravity (John Bokma)
2. Re: Truoble With A Search Script for ImageBin.org
(Cameron Simpson)
3. example of ssl with SimpleXMLRPCServer in 2.6? (Rowland Smith)
4. Re: multiprocessing on freebsd (Tim Arnold)
5. Re: Python bindings tutorial (Tim Roberts)
6. Re: sqlite3, memory db and multithreading (John Nagle)
7. Re: GC is very expensive: am I doing something wrong?
(Patrick Maupin)
8. Bug in Python APscheduler module. (anand jeyahar)
9. Re: Bug in Python APscheduler module. (Terry Reedy)
10. Re: Python bindings tutorial (Alf P. Steinbach)
--
http://mail.python.org/mailman/listinfo/p...
__________________________________________________________________Looking for the perfect gift? Give the gift of Flickr!
http://www.flickr...
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Importing modules
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password