Python – delete *.pyc

cachingpython

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…

Best Answer

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.:

reload(three)