I have three modules as:
one.py
:
def abc():
print "Heeeeeeeeeeeiiiiiioooooooooo"
two.py
:
import one
def defg():
one.abc()
three.py
:
import os
from time import sleep
import two
two.defg()
sleep(20)
directory = os.listdir('.')
for filename in directory:
if filename[-3:] == 'pyc':
print '- ' + filename
os.remove(filename)
I have three doubts.Kindly help me.
When i run three.py
for the first time one.pyc
and two.pyc
will be created. I can see it since i gave 20 sec delay. After executing the statement os.remove(filename)
, they gets removed. Until here its fine.
Again without closing the IDLE as well as script i ran three.py
. This time no .pyc
file was created. Why is this so ?
If I close IDLE as well as the script, .pyc
will be created as before.
Why the compiled code is not getting created again and agin ?
Also,if I make a change in one.py
it will not be shown if I run without closing the shells. I need a solution for this also.
Third doubt is if the compiled code is getting deleted first time itself then how the second run gives the same result without .pyc
?
Hoping for a solution...
I think that IDLE is caching the bytecode within its own Python process, so it doesn't need to regenerate the it each time the file is run.
The .pyc isnt getting created again because there is a refernce to your imported module in code. When it is re-run, this reference is used.
This is why the .pyc isnt generated again, and also why the extra changes you make arent getting run.
You can either remove all references and call a garbage collect, or use the built in reload() function on the modules. e.g.: