當一個名爲 spam 的模塊被導入的時候,解釋器首先尋找具備該名稱的內置模塊。若是沒有找到,而後解釋器從 sys.path 變量給出的目錄列表裏尋找名爲 spam.py 的文件。sys.path 初始有這些目錄地址:html
包含輸入腳本的目錄(或者未指定文件時的當前目錄)。
PYTHONPATH (一個包含目錄名稱的列表,它和shell變量 PATH 有同樣的語法)。
取決於安裝的默認設置
註解 在支持符號連接的文件系統上,包含輸入腳本的目錄是在追加符號連接後才計算出來的。換句話說,包含符號連接的目錄並 沒有 被添加到模塊的搜索路徑上。
在初始化後,Python程序能夠更改 sys.path。包含正在運行腳本的文件目錄被放在搜索路徑的開頭處, 在標準庫路徑以前。這意味着將加載此目錄裏的腳本,而不是標準庫中的同名模塊。 除非有意更換,不然這是錯誤。更多信息請參閱 python標準模塊。python
「編譯過的」Python文件shell
爲了加速模塊載入,Python在 pycache 目錄裏緩存了每一個模塊的編譯後版本,名稱爲 module.version.pyc ,其中名稱中的版本字段對編譯文件的格式進行編碼; 它通常使用Python版本號。例如,在CPython版本3.3中,spam.py的編譯版本將被緩存爲 __pycache__/spam.cpython-33.pyc。此命名約定容許來自不一樣發行版和不一樣版本的Python的已編譯模塊共存。緩存
Python根據編譯版本檢查源的修改日期,以查看它是否已過時並須要從新編譯。這是一個徹底自動化的過程。此外,編譯的模塊與平臺無關,所以能夠在具備不一樣體系結構的系統之間共享相同的庫。優化
Python在兩種狀況下不會檢查緩存。首先,對於從命令行直接載入的模塊,它歷來都是從新編譯而且不存儲編譯結果;其次,若是沒有源模塊,它不會檢查緩存。爲了支持無源文件(僅編譯)發行版本, 編譯模塊必須是在源目錄下,而且絕對不能有源模塊。編碼
給專業人士的一些小建議:spa
你能夠在Python命令中使用 -O 或者 -OO 開關, 以減少編譯後模塊的大小。 -O 開關去除斷言語句,-OO 開關同時去除斷言語句和 doc 字符串。因爲有些程序可能依賴於這些,你應當只在清楚本身在作什麼時才使用這個選項。「優化過的」模塊有一個 opt- 標籤而且一般小些。未來的發行版本或許會更改優化的效果。
一個從 .pyc 文件讀出的程序並不會比它從 .py 讀出時運行的更快,.pyc 文件惟一快的地方在於載入速度。
compileall 模塊能夠爲一個目錄下的全部模塊建立.pyc文件。
關於這個過程,PEP 3147 中有更多細節,包括一個決策流程圖。命令行