前言 :
接續 簡介模組 的內容。sys.path 陣列中的字串元素其實是由幾個來源所組成:所執行檔案(模組)的所在目錄、PYTHONPATH 環境變數的內容、標準程式庫搜尋目錄、.pth檔案中所列出的目錄.
匯入模組 :
例如,若在Windows上,有個模組檔案位於 C:\Software\Python3.2.2\tutorial\ClassDefModule\ImportModule,而 Python 安裝於 C:\Software\Python3.2.2\ :
- demo.py :
- import sys
- print(sys.path)
至於 .pth 檔案所列出的目錄,是指你可以在 Python 安裝目錄,或者是安裝目錄的 lib\site-packages 目錄中建立 .pth 檔案,當中一行一行列出搜尋模組檔案的目錄,如果該目錄確實存在,則會列為 sys.path 的內容. 例如,若在 C:\Software\Python3.2.2\ 中放置 mydir.pth,內容如下 :
而在 C:\Software\Python3.2.2\Lib\site-packages 中放置一個 mydir.pth,內容如下 :
如果所列的目錄確實存在,則再度執行 demo.py,會顯示如下 :
import 會在 sys.path 中尋找 .py 或已編譯的 .pyc,如果 .py 尚未編譯則編譯為 .pyc,而後載入執行一次,再次 import 同一個模組並不會再執行一次模組,如果找到 .py 與 .pyc,而 .pyc 的版本並沒有比 .py 舊,則略過編譯直接執行,如果僅找到 .pyc 而沒有找到 .py,也會直接執行! 在執行時期,你可以動態地改變 sys.path 的內容,來改變搜尋模組的路徑。例如,若有個 superman.py 放在 C:\tmp\test5 中,而 superman.py 的內容如下 :
- print('superman modulle')
- name = 'John'
- test1.py :
- import sys
- print(sys.path, end='\n\n')
- sys.path.append('C:\\tmp\\test5') # \\t 轉義 \t
- print(sys.path, end='\n\n')
- import superman
- print(superman.name)
Python 的 import 是執行時期的運算,import 某個模組,就會執行該模組中定義的內容,被 import 的模組名稱會成為目前模組的變數,而被 import 的模組中的變數,就是以被 import 模組名稱為名稱空間.
Supplement
* FAQ - set pythonpath before import statements
沒有留言:
張貼留言