誰能透徹地講講Python模組的檢索順序?python苦短2017-11-06 21:49:09

搜尋順序應該是?

內建模組 -》主目錄 -》PYTHONPATH環境變數 -》標準庫 -》。pth檔案指定的內容

所以如果主目錄裡有一個自定義的模組檔案檔案,應該會先載入,然後後面標準庫的模組檔案可能就不會載入了,也就是隱藏了。

還是實驗一下:

建立一個sys。py在主目錄下,以下是在windows的py3。5上實驗的,sys。py內容:

# filename sys。py in current working directory

def func():

print(‘This is my own sys。py‘)

func()

這樣按理說在cmd中執行python然後import sys,會列印一句:

This is my own sys。py

但事實上並不會,還是載入了built-in的sys,直接輸入sys能看到:

>>> sys

既然是sys是內建的,試試os,同樣的方法,一樣的結果:

>>> os

因為os在標準庫裡面,應該是當前目錄下的os。py會覆蓋了(隱藏了)庫裡的os模組才對。最後試一下__future__,才是可以的:

>>> import __future__

this is my __future__

這是為什麼?我想應該是在執行python命令時,os作為一些初始化工作時被匯入了,所以其實再手動import os,根本沒有過載。如何證明呢?我看到python手冊裡有說,site。py在初始化的時候會自動執行,所以先看看他的內容,確實有:

import sys

import os

那麼我在這兩句之前加一句,並儲存退出:

import __future__

退出cmd中的python,重新執行python命令,再匯入試試:

>>> import __future__

這次就

不會

輸出:

this is my __future__

了,即使我在當前目錄定義了這個__future__。py,所以說的確是已經載入過了。