python模塊導入細節
本文主要介紹了關于python模塊導入的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧
官方手冊:https://docs.python.org/3/tutorial/modules.html
可執行文件和模塊
python源代碼文件按照功能可以分為兩種類型:
用于執行的可執行程序文件 不用與執行,僅用于被其它python源碼文件導入的模塊文件例如文件a.py和b.py在同一目錄下,它們的內容分別是:
# b.pyx="var x in module b"y=5# a.py:import bimport sysprint(b.x)print(b.y)
a.py導入其它文件(b.py)后,就可以使用b.py文件中的屬性(如變量、函數等)。這里,a.py就是可執行文件,b.py就是模塊文件,但模塊名為b,而非b.py。
python提供了一些標準庫,是預定義好的模塊文件,例如上面的sys模塊。
在此有幾個注意點,在后面會詳細解釋:
b.x、b.y 上面都是直接以模塊名導入的,python還支持更復雜的包導入方式,例如導入abc/b.py時,使用import abc.b。下一篇文章會詳細解釋包的導入方式python模塊搜索路徑
在a.py中導入模塊b的時候,python會做一系列的模塊文件路徑搜索操作:b.py在哪里?只有找到它才能讀取、運行(裝載)該模塊。
在任何一個python程序啟動時,都會將模塊的搜索路徑收集到sys模塊的path屬性中(sys.path)。當python需要搜索模塊文件在何處時,首先搜索內置模塊,如果不是內置模塊,則搜索sys.path中的路徑列表,搜索時會從該屬性列出的路徑中按照從前向后的順序進行搜索,并且只要找到就立即停止搜索該模塊文件(也就是說不會后搜索的同名模塊覆蓋先搜索的同名模塊)。
例如,在a.py文件中輸出一下這個屬性的內容:
# a.py:import sysprint(sys.path)
結果:
['G://pycode', 'C://Program Files (x86)//Python36-32//python36.zip', 'C://Program Files (x86)//Python36-32//DLLs', 'C://Program Files (x86)//Python36-32//lib', 'C://Program Files (x86)//Python36-32', 'C://Users//malong//AppData//Roaming//Python//Python36//site-packages', 'C://Program Files (x86)//Python36-32//lib//site-packages']
python模塊的搜索路徑包括幾個方面,按照如下順序搜索:
程序文件(a.py)所在目錄,即G://pycode 環境變量PYTHONPATH所設置的路徑(如果定義了該環境變量,則從左向右的順序搜索) 標準庫路徑 .pth文件中定義的路徑需要注意,上面sys.path的結果中,除了
新聞熱點
疑難解答