python中package機制的兩種實現方式

2021-06-04 17:02:40 字數 1842 閱讀 1528

@洞庭散人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 函式...