Python import 機制
sys.path
>>> import sys
>>> sys.path
以上代碼輸出包含一組地址的list,當進行import操作時,會從該list中的地址分別遍歷尋找模塊。
執行操作可以看到,list中包含python執行文件所在的lib目錄< site-packages >,所有python包,通過pip安裝的,都將存儲在這裏,通過 python setup.py install
則會安裝在 < dist-packages >。
因爲是list,所以可以動態添加新的路徑
import sys
sys.path.append("..")
以上代碼將上級目錄添加到檢索路徑列表中。
PYTHONPATH
python 帶有環境變量PYTHONPATH,是用來像sys.path添加新的路徑的。
本地開發的軟件import
.
├── mol
│ ├── mol1.py
│ └── mol2.py
└── pkg
├── a.py
└── b.py
如圖,當直接執行a文件時:
python a.py
import b
import mol1
這是因爲,直接執行 a.py,sys.path包含的路徑是當前目錄pkg。所以檢索不到mol1模塊,但是當整個sdk安裝了之後,從< site-packages > 或 < dist-packages >,都可以找到pkg和mol,所以可以正常執行。
建議
參考的建議是,開一個終端專門用於跑該文件,並在該終端中添加環境變量
export PYTHONPATH=$PYTHONPATH:/Home/project/myproject
在 : 後面添加項目路徑。比起在sys.path 進行append操作的好處是,執行效果與打包成sdk安裝後的使用一致,無需專門在測試執行過程中進行路徑修改。
另外一般不建議在很深的目錄內的文件執行python操作,一般會發生執行操作都是爲了寫一個main函數進行測試,如需測試,可以使用pytest進行測試。