delete *.pyc

2019-03-01 22:09发布

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

3条回答
Deceive 欺骗
2楼-- · 2019-03-01 22:46

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.

查看更多
迷人小祖宗
3楼-- · 2019-03-01 23:01

Edit ~/.bashrc and add this shell function to it

$ cd ; pyclean

pyclean () {
        find . -type f -name "*.py[co]" -delete
        find . -type d -name "__pycache__" -delete
}    
查看更多
Emotional °昔
4楼-- · 2019-03-01 23:08

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)
查看更多
登录 后发表回答