2009-04-16 107 views
1

我有三個模塊爲:刪除* .pyc文件

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) 

我有三個疑問。 請幫助我

當我運行three.py第一次one.pyctwo.pyc將被創建。我可以看到它,因爲我給了20秒的延遲。執行語句os.remove(filename)後,它們被刪除。直到這裏罰款。

再次沒有關閉IDLE以及腳本我跑three.py。這一次沒有創建.pyc文件。 這是爲什麼這麼

如果我關閉IDLE以及腳本,將會像以前一樣創建.pyc

爲什麼編譯後的代碼不會再次被創建,並且agin?

此外,如果我在one.py中進行更改,如果我在不關閉殼的情況下運行,它將不會顯示。 我也需要一個解決方案。

第三個疑問是如果編譯代碼第一次被刪除本身,那麼第二次運行如何給出相同的結果沒有.pyc

希望有一個解決方案...

+0

請格式化你後好一點,讓你的觀點更加清晰。 – vartec 2009-04-16 11:30:43

+3

你需要更清楚你以後是什麼樣的「解決方案」,你的問題是什麼?您要刪除的文件不會被創建?我會說這是一件好事,意味着你有更少的工作要做... – unwind 2009-04-16 11:31:47

+1

@ejinacm:我不認爲「無關閉殼」是一個有效的標籤。事實上,你是唯一使用它的人可能是一個很好的暗示。 – 2009-04-16 11:44:50

回答

8

.pyc不會再次創建,因爲在代碼中引用了導入的模塊。重新運行時,使用該參考。

這就是爲什麼.pyc不會再次生成,以及爲什麼您所做的額外更改無法運行。

您可以刪除所有引用並調用垃圾回收,也可以使用模塊中內置的reload()函數。例如:

reload(three) 
1

我認爲是空閒緩存自己的Python進程中的字節碼,所以它並不需要重新每個文件運行時它。

1

編輯〜/。bashrc並添加此shell功能

$ cd; pyclean

pyclean() { 
     find . -type f -name "*.py[co]" -delete 
     find . -type d -name "__pycache__" -delete 
}