Reloading a module
Tom
bondpaper at earthlink.net
Tue Oct 1 00:58:46 EDT 2002
More information about the Python-list mailing list
Tue Oct 1 00:58:46 EDT 2002
- Previous message (by thread): Reloading a module
- Next message (by thread): Reloading a module
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
In article <mailman.1033441502.25759.python-list at python.org>, Jeff Epler <jepler at unpythonic.net> wrote: > > As for .pyc vs .py, Python follows these steps when importing a module: > if a .pyc file exists, read the magic number, version, and the > stored timestamp. Compare the version to this Python version, > and the stored timestamp to the .py file's timestamp. If these > both match, or the version matches and the .py file doesn't exist, > use the .pyc file. > otherwise, compile the .py file and rebuild the .pyc file along the way > > The only circumstance that would interfere with this is NFS or another > network filesystem making the check of the timestamp on the .py file > unreliable---i.e., python can fail to detect that the .py file has been > updated, because the OS gives it stale data. Using a filesystem that has > no timestamp at all (or a very granular timestamp, so that two revisions of > "silly.py" could share the same timestamp) could cause the same problem, > though I don't know of any such filesystems offhand. > > (That said, I rarely actually notice problems of this type over NFS) > > It's possible that you've discovered some sort of new problem with the way > .pyc caching or reloading work, but the idea is so simple that I can't see it > failing... > > Jeff > Jeff, Try this: Here's a file called randomclass.py: class randomClass: def printit(self): print "This is rather silly" myRandomValue = "Foo" >>>import randomclass >>> dir(randomclass) ['__builtins__', '__doc__', '__file__', '__name__', 'myRandomValue', 'randomClass'] >>>m = randomclass >>>print m.myRandomValue Foo >>> n = randomclass >>> n.randomClass().printit() This is rather silly Now change the file by removing the line: myRandomValue = "Foo" ...and then save the change. >>> reload(randomclass) <module 'randomclass' from 'randomclass.py'> >>> dir(randomclass) ['__builtins__', '__doc__', '__file__', '__name__', 'myRandomValue', 'randomClass'] Odd...the reference to myRandomValue is still there, and it behaves as though the modification was never made: >>> n = randomclass >>> print n.myRandomValue Foo It doesn't seem like this should be happening. It happens the same on both Linux and the Mac (os 9). Regards, Tom
- Previous message (by thread): Reloading a module
- Next message (by thread): Reloading a module
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list