Python 包的制作(__init__.py)
阿新 • • 發佈:2018-06-03
否則 TP tps 出了 包含 brush html 我們 rac 如何制作一個自己的包:
首先,需要創建一個文件夾,將其作為頂層包,在此文件夾內我們可以定義各個不同的子文
件夾與 .py 文件作為各個子包與模塊
註意:在每個包文件夾下都需要有一個 __init__.py 文件,此文件可以為空 例如:我們創建一個文件夾Test作為頂層包文件夾,在Test內添加 __init__.py Top.py
接下來,我們創建一個在與 Test 在同一目錄層次的 Test.py 文件,在它裏面導入Test包
並引用Test包中包含的模塊 Top 中的函數 top
我們看到上面的輸出結果,提示在 Test 中並沒有找到模塊 Top ,這是為什麽呢?
問題出在 __init__.py 文件上,我麽來看一下 __init__.py 文件
有這樣,這個文件夾才能被識別為一個Package,否則就僅僅是一個文件夾。
而在上面的出錯消息中我們看到,出錯的在第二行, 證明 Test 這個包被成功導入了,但
第二行出了錯,在 Test 內找不到 Top 這個模塊。但我們已經將 Top.py 文件放在了Test
這個文件夾下的,為何會找不到呢?原因還是在 __init__.py 文件上。 雖然 Test 內有
__init__.py 文件,但僅僅這樣,我們只能使 Test 被識別為一個Package, 而無法引用
內部的模塊。我們需要在 __init__.py 文件中先導入 Top 模塊,才能在外部導入 Test包
時使用這些模塊,下面我們修改一下 __init__.py 文件,再執行Test.py看看結果:
和我們設想的一樣,輸出了 "Top!"
首先,需要創建一個文件夾,將其作為頂層包,在此文件夾內我們可以定義各個不同的子文
件夾與 .py 文件作為各個子包與模塊
註意:在每個包文件夾下都需要有一個 __init__.py 文件,此文件可以為空 例如:我們創建一個文件夾Test作為頂層包文件夾,在Test內添加 __init__.py Top.py
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ ls Test __init__.py __pycache__ Top.py [wangml@iZwz976helaylvgqok97prZ Test]$ cat Top.py def top(): print("Top!") return
並引用Test包中包含的模塊 Top 中的函數 top
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ cat Test.py import Test Test.Top.top() 執行Test.py這個文件,我們會看到什麽呢?是輸出 "Top!" 嗎? [wangml@iZwz976helaylvgqok97prZ pythoncode]$ python3 Test.py Traceback (most recent call last): File "Test.py", line 2, in <module> Test.Top.top() AttributeError: module ‘Test‘ has no attribute ‘Top‘
問題出在 __init__.py 文件上,我麽來看一下 __init__.py 文件
[wangml@iZwz976helaylvgqok97prZ Test]$ cat __init__.py這是一個空文件。我們在前面說過,每個包文件內都需要包含一個 __init__.py 文件,只
有這樣,這個文件夾才能被識別為一個Package,否則就僅僅是一個文件夾。
而在上面的出錯消息中我們看到,出錯的在第二行, 證明 Test 這個包被成功導入了,但
第二行出了錯,在 Test 內找不到 Top 這個模塊。但我們已經將 Top.py 文件放在了Test
這個文件夾下的,為何會找不到呢?原因還是在 __init__.py 文件上。 雖然 Test 內有
__init__.py 文件,但僅僅這樣,我們只能使 Test 被識別為一個Package, 而無法引用
內部的模塊。我們需要在 __init__.py 文件中先導入 Top 模塊,才能在外部導入 Test包
時使用這些模塊,下面我們修改一下 __init__.py 文件,再執行Test.py看看結果:
[wangml@iZwz976helaylvgqok97prZ Test]$ vim __init__.py [wangml@iZwz976helaylvgqok97prZ Test]$ cat __init__.py from Test import Top [wangml@iZwz976helaylvgqok97prZ Test]$ cd ../ [wangml@iZwz976helaylvgqok97prZ pythoncode]$ python3 Test.py Top!
和我們設想的一樣,輸出了 "Top!"
Python 包的制作(__init__.py)