2013-08-25 48 views
3

我使用Windows 7並安裝了Python 2.7.5和3.3.2。當我進口任何Python模塊爲創建一個.pyc文件的另一個模塊我path環境變量設置爲爲什麼.pyc文件有時會在同一個目錄中創建,有時在__pycache__子目錄中創建?

C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\python27;C:\Python33\Scripts 

。創建它的地方取決於是否調用Python2或Python3來運行它。

  • 當我雙擊.pyc文件在同一目錄
  • 當我通過IDLE編輯創建的模塊,然後運行它,然後將文件在子目錄中創建。
  • 如果我在頂部添加#! Python3,則雙擊將在子目錄中創建.pyc文件。

據我所知,其原因是因爲Python2和Python3決定管理字節編譯代碼的方式不同。

我目前專注於Python3,並希望只在子目錄中創建文件。

我試着編輯path變量,把Python3放在Python 2之前,這樣Python3應該被調用而不是Python2。即使在雙擊未發生的Python腳本並且在同一目錄中創建了字節編譯代碼後,即使在更改它之後也是如此。

所以Python2被用來雙擊運行Python腳本。什麼導致了這種行爲,我怎樣才能確保在不卸載Python2的情況下調用Python3而不是Python2?

回答

9

Python 3改變了字節碼(.pyc)文件的存儲方式。 Python 2使用將它們放在同一目錄中的約定,但對於Python 3,開發人員決定通過將它們全部放在單獨的目錄中來減少混亂。這也更容易支持除CPython以外的Python實現,因爲每個實現都可以在__pycache__目錄中擁有自己的.pyc文件,而不是覆蓋其他實現的文件。

+0

那麼,爲什麼在我的情況下,雙擊生產編譯的文件在同一目錄,除非我使用'#! python3'在頂部? –

+0

@AshwiniChaudhary但是[子標題](http://docs.python.org/dev/using/windows.html#from-a-script)指出我可以在Windows上使用shebang。我還問過comp.lang.python,那裏的人告訴我可以使用它。 –

+0

@AseemBansal你安裝了['py launcher'](https://bitbucket.org/vinay.sajip/pylauncher)嗎? –