@洞庭散人python中package機制的兩種實現方式
當執行import module時,直譯器會根據下面的搜尋路徑,搜尋module1.py檔案。
1) 當前工作目錄
2) pythonpath中的目錄
3) python安裝目錄 (/usr/local/lib/python)
事實上,模組搜尋是在儲存在sys.path這個全域性變數中的目錄列表中進行搜尋。
sys.path會在直譯器開始執行時被初始化成包含:
1)當前工作目錄
2) pythonpath中的目錄
3) python安裝目錄 (/usr/local/lib/python)
package是模組的集合,每乙個package的根目錄下面都應當有乙個__init__.py 檔案。當直譯器發現目錄下有這個檔案時,他就會認為這是乙個package,而不是乙個普通的目錄。
我們通過下面這樣的乙個例項來說明
假定專案結構如下:
demo.py
mypackage
---classone.py
---classtwo.py
---__init__.py
複製**
現在我們通過兩種方式來實現包機制,主要區別就在於是否在__init__.py中寫入模組匯入語句。
1,__init__.py是乙個空白檔案的方式,
demo.py內容如下:
from mypackage.classone import classone
from mypackage.classtwo import classtwo
if __name__ == "__main__":
c1 = classone()
c1.printinfo()
c2 = classtwo()
c2.printinfo()
複製**
classone.py內容如下:
class classone:
def __init__(self):
self.name = "class one"
def printinfo(self):
print("i am class one!")
複製**
classtwo.py內容如下:
class classtwo:
def __init__(self):
self.name = "class two"
def printinfo(self):
print("i am class two!")
複製**
2,如果在__init__.py中寫入匯入模組的語句,則上述例子可以這樣來做。
其中__init__.py中內容如下:
from classone import classone
from classtwo import classtwo
複製**
demo.py內容如下:
import mypackage
if __name__ == "__main__":
c1 = mypackage.classone()
c1.printinfo()
c2 = mypackage.classtwo()
c2.printinfo()
複製**
或者demo.py也可以定義如下:
from mypackage import *
if __name__ == "__main__":
c1 = classone()
c1.printinfo()
c2 = classtwo()
c2.printinfo()
複製**
python程式設計 package中 init
詳細解釋 總結 當 import 乙個 package 的時候,它會隱性的去執行此檔案,而在此檔案中定義的物件,會被繫結到當前的命名空間裡面來。在 python3.2 版本之前,定義的 package 下面一定要有此檔案,這樣 python 才知道它是乙個 package,才可以尋找到相關模組的路徑...
python中package注意事項
個人工作中的ssd cardreader camera audio模組文件組織形式如下 rcllib init pyrcllegacy.pymodulesagilentop.pyuvccam.pyuvccam.dll 注 rcllib存放於 c python27 lib site packages ...
python中package使用的幾個點子
1 乙個python的package資料夾中 init py 檔案是在引用該包時,首先執行的乙個檔案。正常情況下,我們沒有對它進行編輯時,預設為空。2 utils.py 檔案中儲存一些常見的公用的函式 方法。專案不同,裡面內容也不一定相同。在呼叫時,可直接用 from utils import 函式...