誰能透徹地講講Python模塊的檢索順序?
搜索順序應該是?
內置模塊 -》主目錄 -》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 <module ‘sys‘ (built-in)>
既然是sys是內置的,試試os,同樣的方法,一樣的結果:
>>> os <module ‘os‘ from ‘C:\\Program Files\\Python35\\lib\\os.py‘>
因為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,所以說的確是已經加載過了。