關於Python包和模組的10個知識清單
阿新 • • 發佈:2018-12-12
有同學問題關於模組與包的問題,特給新人總結的關於Python包與模組的10個知識清單。
0、一個模組(module)就是一個py檔案,模組的名字就是該檔案的名字(不包含字尾)
1、一個 包(package)就是一個資料夾,(Python2規定該資料夾必須包含一個 __init__.py
,Python3沒有要求),包名就是資料夾名。
2、按 import 進來的物件不同分為4種場景:
1. import <package> # 匯入一個包 2. import <module> # 匯入一個模組 3. from <package> import<module or subpackage or object> # 從一個包中匯入模組/子包/物件 4. from <module> import <object> # 從模組中匯入物件
3、直譯器會按照sys.path列表的順序來查詢被引入的包或模組名字。
>>> import sys >>> import pprint >>> pprint.pprint(sys.path) ['', 'C:\\Python\\Python35-32\\python35.zip', 'C:\\Python\\Python35-32\\DLLs', 'C:\\Python\\Python35-32\\lib', 'C:\\Python\\Python35-32', 'C:\\Python\\Python35-32\\lib\\site-packages']
優先載入當前工作目錄下的模組,如果你的專案中使用了與內建模組中同名的包或模組名,就會遇到沒有xx屬性之類的報錯提示,新手特喜歡幹這種事。
4、你可以操作 sys.path,使得其他路徑檔案加入到Path中,使之能被直譯器發現。
# test.py import sys, os # 當前目錄沒有hi模組,報錯找不到模組 importhi Traceback (most recent call last): ImportError: No module named hi # hi模組所在位置: /data/hi.py # 將hi所在模組加入sys.path sys.path.append("/data") # 可以正常工作了 import hi
5、另外一種載入模組的方法:如果你的模組不在 sys.path,除了第5條方法在外,還可以使用 imp 模組中的方法 imp.load_source
import imp imp.load_source("hi", "C://data/hi.py") import hi # 可以自己指定模組的名字,相當與 import hi as h2 imp.load_source("h2", "C://data/hi.py") import h2
6、import module 時,模組中所有的程式碼將被執行(類物件,函式物件將被建立,不會被呼叫),import package 時,init.py 檔案中的程式碼也將被執行。
7、模組的 __file__
屬性
匯入模組時,可以通過模組的 __file__
屬性檢視模組所在磁碟的路徑位置
>>> import requests >>> requests.__file__ 'D:\\Programs\\Anaconda3\\envs\\py_test\\lib\\site-packages\\requests\\__init__.py'
8、永遠不要使用 from
9、沒有了。
關注公眾號「Python之禪」(id:vttalk)獲取最新文章