importsys,os,pprint
trace=0 #
1代表目錄 ,2代表加上檔案
visited={}
allsizes=
for srcdir in
sys.path:
for (thisdir,subshere,fileshere) in
os.walk(srcdir):
if trace>0:print
(thisdir)
thisdir=os.path.normpath(thisdir)
fixcase=os.path.normcase(thisdir)
if fixcase in
visited:
continue
else
: visited[fixcase]=true
for filename in
fileshere:
if filename.endswith('
.py'
):
if trace>1:print('
...'
,filename)
pypath=os.path.join(thisdir,filename)
try:
pysize=os.path.getsize(pypath)
except
os.error:
print('
skipping
',pypath,sys.exc_info())
else
: pylines=len(open(pypath,'rb'
).readlines())
print('
by size...')
allsizes.sort()
pprint.pprint(allsizes[:3])
pprint.pprint(allsizes[-3:])
print('
by lines...')
allsizes.sort(key=lambda x:x[1])
pprint.pprint(allsizes[:3])
pprint.pprint(allsizes[-3:])
執行的時候,這個指令碼遍歷模組匯入路徑及其下所有有效的目錄,試圖對這棵樹進行整體搜尋。事實上,它包含了三層巢狀迴圈,分別針對路徑下的每一項,該項的每個目錄,以及該目錄下的每個檔案。因為模組路徑可能包括隨意命名的目錄,所以在搜尋過程中指令碼必須注意:
統一目錄路徑格式。解決斜槓和句點的問題,將目錄統一成一種風格。
統一目錄名大小寫。在對大小寫不敏感的windows系統下轉化成小寫
檢測重複情況以避免同乙個目錄訪問兩次(同一目錄可能通過多條路徑從sys.path鏈結到)
在二進位制模式下開啟檔案以獲取行數,可以避免檔案內中潛在的unicode解碼錯誤。
這個版本的腳步還新增了行計數器,這一點也可能延長腳步執行的時間,不過報告這個數字是個有用的功能。
python 模組搜尋路徑
當你匯入乙個模組,python 解析器對模組位置的搜尋順序是 1 當前目錄 2 如果不在當前目錄,python 則搜尋在 shell 變數 pythonpath 下的每個目錄。3 如果都找不到,python會檢視預設路徑。unix下,預設路徑一般為 usr local lib python 模組搜尋...
Python模組搜尋路徑
最近一直被python包匯入絆倒,所以打算好好學習一下python包模組搜尋路徑 外部的terminal中執行,不是ide中 import的時候,python interpreter首先搜尋built in module中有沒有叫這個名的 比如os模組,用 builtins 檢視 若是沒有才會到sy...
Python 模組搜尋路徑
我們都知道,使用python時,無論是使用第三方的模組 庫 還是自己開發的模組,都需要先在 中使用import來引入。對於初學者,經常會遇到的乙個問題是在使用import時,python 找不到相應的模組,於是編譯器報 importerror錯誤。那麼,python 如何知道在 搜尋模組的路徑呢?當...