Python-list Digest, Vol 4, Issue 38

fowlertrainer at anonym.hu fowlertrainer at anonym.hu
Mon Jan 5 10:40:50 EST 2004


Hello !

I have used mod_python. But it is don't reload my modules when I
editing them.

I try with this:
--------------------
# Module importer
import os
import traceback
import kinterbasdb
import sys
import time
import threading
import imp
import stat

ImpLock=threading.Lock()
IModuleDir="C:/bhaweb/modules"
IModules={}

def LoadModule(ModName):
    fp, pathname, description = imp.find_module(ModName)
    try:
      mod=imp.load_module(ModName, fp, pathname, description)
      print mod
      sys.modules[ModName]=mod
    finally:
      # Since we may exit via an exception, close fp explicitly.
      if fp: fp.close()

def ImportModules(Modules):
    ImpLock.acquire()
    try:
        if not (IModuleDir in sys.path): sys.path.append(IModuleDir)
        # Do imports, if needed
        print Modules
        for m in Modules:
            sf=IModuleDir+"/"+m+".py"
            if sys.modules.has_key(m):
               sd=os.stat(sf)
               lm=sd[stat.ST_MTIME]
               if IModules.has_key(m):
                  dd=IModules[m]
                  if (dd<>lm):
                     print "ReLoad"
                     reload(sys.modules[m])
               IModules[m]=lm
            else:
               print "Load"
               LoadModule(m)
               sd=os.stat(sf)
               lm=sd[stat.ST_MTIME]
               IModules[m]=lm
            '''
            import s
            sf=IModuleDir+"/"+s


            '''
        print IModules
    finally:
        ImpLock.release()

#for k in sys.modules.keys(): print k,sys.modules[k]
'''
f=file(IModuleDir+"/test.py","w")
f.write("print 1")
f.close()
'''
#print os.stat(IModuleDir+"/test.py")[stat.ST_MTIME]
#sys.exit()
'''
ImportModules(["test"])
f=file(IModuleDir+"/test.py","w")
f.write("print 2")
f.close()
time.sleep(2)
ImportModules(["test"])
'''
ImportModules(["test"])
BHASession.test()
--------------------
test.py is this:
def test():
    print 1
--------------------
But python is say:

> Executing: C:\Program Files\ConTEXT\ConExec.exe "C:\Python\python.exe" "C:\bhaweb\modules\ModImport.py"

['test']
Load
<module 'test' from 'C:\bhaweb\modules\test.pyc'>
{'test': 1073316581}
Traceback (most recent call last):
  File "C:\bhaweb\modules\ModImport.py", line 75, in ?
    BHASession.test()
NameError: name 'BHASession' is not defined
> Execution finished.

I run this in native mode, but do this in under mod_apache also.

Why ? What I do wrong ?
Plase send the email in private also, because I'm in digest mode.

Thanx:
 KK





More information about the Python-list mailing list