一、模塊搜索路徑的順序
模塊其實就是一個檔案,如果要執行檔案,首先就需要找到模塊的路徑(某個檔案夾),如果模塊的檔案路徑和執行檔案不在同一個檔案目錄下,我們就需要指定模塊的路徑,
模塊的搜索路徑指的就是在匯入模塊時需要檢索的檔案夾,
匯入模塊時查找模塊的順序是:
- 先從記憶體中已經匯入的模塊中尋找
- 內置的模塊
- 環境變數sys.path中找
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的第一個值是當前執行檔案的所在的檔案夾
1 驗證先從記憶體中找
如果我們在運行run.py檔案的時候,快速洗掉mmm.py檔案,我們會發現檔案會繼續運行,而不會報錯,因為mmm已經被匯入記憶體當中,如果我們再一次運行run.py時會報錯,因為mmm.py已經被洗掉了,
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
2 驗證先從內置中找
time.py
print('from time.py')
run.py
import time
print(time) # <module 'time' (built-in)>
3 驗證從sys.path中找
如果mmm.py在/Users/mac/Desktop/video/python路徑下,而執行檔案路徑為/Users/mac/Desktop/video/python/day16,如果普通匯入一定會報錯,我們可以把/Users/mac/Desktop/video/python添加到環境變數sys.path中,防止報錯,
# run.py
import sys
sys.path.append(r'/Users/mac/Desktop/video/python')
print(sys.path)
import mmm
mmm.f1()
二、搜索路徑以執行檔案為準

假設我們有上述的目錄結構的檔案,檔案內代碼分別是:
m1.py
#學習中遇到問題沒人解答?小編創建了一個Python學習交流群:711312441
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/day16/模塊搜索路徑練習,如果我們在m1.py中直接使用import m2匯入m2會報錯,而使用from dir1 import m2匯入m2則會成功,因為搜索路徑以執行檔案為準,dir1和run.py是同目錄下的,因此run.py的環境變數能找到dir1;而m2和run.py不是同目錄下的,因此run.py的環境變數無法直接找到m2,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545032.html
標籤:其他
上一篇:類方法和物件方法
下一篇:Python中模塊的四種方式
