模塊的搜索路徑指的就是在導入模塊時須要檢索的文件夾。python
導入模塊時查找模塊的順序是:app
1.先從內存中已經導入的模塊中尋找
2.內置的模塊
3.環境變量sys.path中找ide
import sys print(f"sys.path: {sys.path}") ''' ['/Users/mac/Desktop/video/python/day16', '/Users/mac/Desktop/video/python', '/Applications/anaconda3/lib/python36.zip', '/Applications/anaconda3/lib/python3.6', '/Applications/anaconda3/lib/python3.6/lib-dynload', '/Applications/anaconda3/lib/python3.6/site-packages', '/Applications/PyCharm.app/Contents/helpers/pycharm_matplotlib_backend'] '''
強調:sys.path的第一個值是當前執行文件的所在的文件夾ui
若是咱們在運行run.py文件的時候,快速刪除mmm.py文件,咱們會發現文件會繼續運行,而不會報錯,由於mmm已經被導入內存當中。若是咱們再一次運行run.py時會報錯,由於mmm.py已經被刪除了。code
# mmm.py def f1(): print('from mmm.py f1')
# run.py import time import mmm time.sleep(10) import mmm mmm.f1() # from mmm.py f1
# time.py print('from time.py')
run.py import time print(time) # <module 'time' (built-in)>
若是mmm.py在/Users/mac/Desktop/video/python路徑下,而執行文件路徑爲/Users/mac/Desktop/video/python/nash,若是普通導入必定會報錯,咱們能夠把/Users/mac/Desktop/video/python添加到環境變量sys.path中,防止報錯。ip
# run.py import sys sys.path.append(r'/Users/mac/Desktop/video/python') print(sys.path) import mmm mmm.f1()
假設咱們有下述的目錄結構的文件,文件內代碼分別是:內存
# m1.py import sys print('模塊m1中查看的結果',sys.path) # import m2 from dir1 import m2 m2.f2()
# m2.py import sys print(sys.path) def f2(): print('from f2')
# run.py import sys print('執行文件查看的結果:',sys.path) from dir1 import m1
其中run.py文件的執行路徑是/Users/mac/Desktop/video/python/nash/模塊搜索路徑練習,若是咱們在m1.py中直接使用import m2導入m2會報錯,而使用from dir1 import m2導入m2則會成功,由於搜索路徑以執行文件爲準,dir1和run.py是同目錄下的,所以run.py的環境變量能找到dir1;而m2和run.py不是同目錄下的,所以run.py的環境變量沒法直接找到m2。pycharm