我知道,一個.pyc
文件是由Python解釋器產生和包含字節代碼,因爲這question說。python解釋器如何知道何時編譯和更新.pyc文件?
我以爲Python解釋器正在使用時間戳來檢測.pyc
是否比.py
更新,如果是,跳過執行時再次編譯它。 (什麼makefile文件這樣做的方式)
所以,我做了一個測試,但它似乎我錯了。
- 我寫
t.py
包含和t1.py
包含import t
。運行命令python t1.py
給輸出123
和產生t.pyc
,所有的預期。 - 然後我編輯
t.py
如print '1234'
,並通過使用更新touch t.pyc
的t.pyc
時間戳。 - 再次運行
python t1.py
,我想我會得到123
,但確實是1234
。所以似乎python解釋器仍然知道t.py
已更新。
然後我不知道Python解釋器是否會編譯生成t.pyc
運行python t1.py
每次。但是,當我運行python t1.py
好幾次,我發現,當不更新t.py
的t.pyc
將不會被更新。
所以,我的問題是:Python解釋器如何知道什麼時候來編譯和更新.pyc
文件?
更新
因爲Python解釋器使用存儲在.pyc
文件的時間戳。我認爲這是.pyc
最後更新時間的記錄。並且在導入時,將其與.py
文件的時間戳進行比較。
於是,我就砍它是這樣的:改變操作系統的時間一老一,和編輯.py
文件。 我想當再次導入時,.py
似乎比.pyc
更早,並且python解釋器不會更新.pyc
。 但我錯了。
那麼,python解釋器是不是比較這兩個時間戳不是以一種更老或更新的方式,而是以完全相同的方式?
以非常相似的方式,我的意思是.pyc
中的時間戳記錄了.py
上次修改時間。導入時,它會將時間戳與.py
的當前時間戳進行比較,如果不相同,請重新編譯並更新.pyc
。
@JonathonReinhart:我會說實際的重複,尤其是因爲該問題包含答案:參考的時間戳是不是文件系統的時間戳,而是存儲在'.pyc'文件中的內部時間戳。 –
@TimPietzcker同意,這只是自動生成的評論。如果只有我有一個*他們那裏花式金徽章*我會立即標記它複製:-) –
仍然,+1,因爲它的創造性努力 - 我從來沒有想過會發生什麼如果你修改文件的時間戳。 –