本着下定義開頭吧:python中import某個A模塊時,首先會從python的內置模塊中查找是否含義該模塊的定義若未查詢到會從sys.path對應的模塊路徑查詢是否含有對應模塊的定義,如果搜索完成依然沒有對應A模塊時則拋出import的異常
接着說明下python的兩種加載py文件的方式:
- python xxx.py
- python -m xxx.py
第一種方式是直接運行方式
第二種方式是把模塊當做腳本來啟動
可能看起來說的python運行方式和sys.path有點大相徑庭,但實際上兩種不同方式的運行導致sys.path[0]的值是有差異的
第一種方式:sys.path[0]是當前腳本的運行目錄
第二種方式:sys.path[0]是空值字符串,也就是當前執行python的目錄
sys.path是一個python搜索模塊的路徑列表:
eg、下邊的X.py文件中打印出sys.path內容:
import sys print sys.path
python x.py運行

其中sys.path[0]是 I:\restful_code\tester,對應調用python解釋器的腳本所在的目錄。 其實就是存放需要運行的代碼的路徑
python -m x.py運行

什么是python解釋器?
當我們編寫Python代碼時,我們得到的是一個包含Python代碼的以.py為擴展名的文本文件。要運行代碼,就需要Python解釋器去執行.py文件。
由於整個Python語言從規范到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來執行Python代碼(當然難度很大)。事實上,確實存在多種Python解釋器。
常見的Python解釋器有: CPython IPython PyPy Jython IronPython
使用場景:
在實際開發中,默認包含了當前目錄為搜索路徑,所以,當前目錄下的模塊和子模塊均可以正常訪問。但是若一個模塊需要import平級的不同目錄的模塊,或者上級目錄里面的模塊,就可以通過修改path來實現
修改path的兩種方法:
方法一:函數添加
這是即時生效的方法,就是在模塊里面修改sys.path值,這種方法修改的sys.path作用域只是當前進程,進程結束后就失效了。
個人比較推薦這種方法,比較干凈, 避免一些沖突問題。
比如現在的代碼目錄結構:
/src/configs/config.py
/src/common/Database.py
假如Database.py期望導入config. py,則可以增加上級目錄到sys.path列表里面:
parent_path = os.path.dirname(sys.path[0]) if parent_path not in sys.path: sys.path.append(parent_path) import configs.config
方法一:修改環境變量
添加系統環境變量PYTHONPATH,在這個環境變量中輸入相關的路徑,不同的路徑之間用逗號(英文的!)分開。路徑會自動加入到sys.path中。
