python模块搜索路径_Python模块搜索路径
當一個名為 spam 的模塊被導入的時候,解釋器首先尋找具有該名稱的內置模塊。如果沒有找到,然后解釋器從 sys.path 變量給出的目錄列表里尋找名為 spam.py 的文件。sys.path 初始有這些目錄地址:
包含輸入腳本的目錄(或者未指定文件時的當前目錄)。
PYTHONPATH (一個包含目錄名稱的列表,它和shell變量 PATH 有一樣的語法)。
取決于安裝的默認設置
注解 在支持符號鏈接的文件系統上,包含輸入腳本的目錄是在追加符號鏈接后才計算出來的。換句話說,包含符號鏈接的目錄并 沒有 被添加到模塊的搜索路徑上。
在初始化后,Python程序可以更改 sys.path。包含正在運行腳本的文件目錄被放在搜索路徑的開頭處, 在標準庫路徑之前。這意味著將加載此目錄里的腳本,而不是標準庫中的同名模塊。 除非有意更換,否則這是錯誤。更多信息請參閱 python標準模塊。
為了加速模塊載入,Python在 pycache 目錄里緩存了每個模塊的編譯后版本,名稱為 module.version.pyc ,其中名稱中的版本字段對編譯文件的格式進行編碼; 它一般使用Python版本號。例如,在CPython版本3.3中,spam.py的編譯版本將被緩存為 __pycache__/spam.cpython-33.pyc。此命名約定允許來自不同發行版和不同版本的Python的已編譯模塊共存。
Python根據編譯版本檢查源的修改日期,以查看它是否已過期并需要重新編譯。這是一個完全自動化的過程。此外,編譯的模塊與平臺無關,因此可以在具有不同體系結構的系統之間共享相同的庫。
Python在兩種情況下不會檢查緩存。首先,對于從命令行直接載入的模塊,它從來都是重新編譯并且不存儲編譯結果;其次,如果沒有源模塊,它不會檢查緩存。為了支持無源文件(僅編譯)發行版本, 編譯模塊必須是在源目錄下,并且絕對不能有源模塊。
給專業人士的一些小建議:
你可以在Python命令中使用 -O 或者 -OO 開關, 以減小編譯后模塊的大小。 -O 開關去除斷言語句,-OO 開關同時去除斷言語句和 doc 字符串。由于有些程序可能依賴于這些,你應當只在清楚自己在做什么時才使用這個選項。“優化過的”模塊有一個 opt- 標簽并且通常小些。將來的發行版本或許會更改優化的效果。
一個從 .pyc 文件讀出的程序并不會比它從 .py 讀出時運行的更快,.pyc 文件唯一快的地方在于載入速度。
compileall 模塊可以為一個目錄下的所有模塊創建.pyc文件。
關于這個過程,PEP 3147 中有更多細節,包括一個決策流程圖。
總結
以上是生活随笔為你收集整理的python模块搜索路径_Python模块搜索路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql一些基本sql操作_MySql
- 下一篇: ajax将数据显示在class为cont