2017-05-05 62 views
1

是否有一種簡單的方法可以將整個Python標準庫「編譯」爲字節碼?如果是這樣,就這也保證了Python從不重新「編譯」一個文件,如果相應的.pyc文件已經存在(只要標準庫未更新或修改)?將整個Python標準庫編譯爲字節碼是否可行且可行?

背景:應用服務器,巨蟒有時自發地進入那表現這樣一個破碎的狀態:

C:\> python 
Traceback (most recent call last): 
    File "C:\Python27\lib\site.py", line 563, in <module> 
    main() 
    File "C:\Python27\lib\site.py", line 552, in main 
    aliasmbcs() 
    File "C:\Python27\lib\site.py", line 478, in aliasmbcs 
    enc = locale.getdefaultlocale()[1] 
AttributeError: 'module' object has no attribute 'getdefaultlocale' 

,並可以通過重新安裝Python來解決。其他人告訴我,他看到損壞的(0字節).pyc文件,並刪除那些解決了這個問題。但是,我無法通過有意創建0字節的.pyc文件來重現此問題。

我不喜歡的事實,屬於標準的庫文件「編譯」按需字節碼,這種情況發生運行Python和本地代碼的過程,可能意外崩潰之內。我寧願預先編譯所有Python代碼,無論它是否有助於解決上述情況。

+1

如果是這樣的話,你應提交與Python的人的錯誤。但原則上,解釋器應在下次需要時重新編譯一個已損壞.pyc文件的模塊。 –

+1

我只是試圖通過創建一個0字節的文件'C重現此:\ Python27 \ LIB \ hmac.pyc'並以交互式Python會話中運行'進口hmac'。該文件被重新創建爲5kb的大小,並且我沒有收到錯誤。 我有一個來自同事的0字節Python文件的信息。我看到的實際錯誤是每當運行Python時都會得到異常,並且重新安裝Python可以解決問題。它是否由損壞的.pyc文件引起的未知。我會更新我的問題。 –

+0

據http://stackoverflow.com/a/17030047/2279059的Python文件損壞可能在Python 2.x中是可能的,而Python的3.3有機制防止腐敗的發生。 –

回答

1

使系統.pyc文件只讀,即使是管理員。這應該阻止Python不必要地對它們進行操作。

如果您使用的是Windows轉到屬性→安全→編輯,並拒絕所有組的所有權限。

+0

確認這可以防止創建'.pyc'文件,並且Python仍然可以在沒有'.pyc'的情況下工作(通過刪除'locale.pyc',拒絕寫入權限,運行'import locale'和'dir(locale) '並驗證'locale.pyc'不存在)。 但是,我懷疑沒有字節碼文件可能會影響性能,所以我想在拒絕寫入訪問之前確保它們在那裏(這也可能是不必要的)。 –

相關問題