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
  • a.py 中引入 b.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進行測試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章