python包的結構就是文件夾結構,如要想讓以下文件夾結構變成python包結構
只需在每個文件夾下添加一個__init__.py。
python __init__.py在包里起一個比較重要的作用
要弄明白這個問題,首先要知道,python在執行import語句時,到底進行了什么操作,按照python的文檔,它執行了如下操作:
第1步,創建一個新的,空的module對象(它可能包含多個module);
第2步,把這個module對象插入sys.module中
第3步,裝載module的代碼(如果需要,首先必須編譯)
第4步,執行新的module中對應的代碼。
也就是說在導入一個包時,python首先去這個包下加載__init__.py.根據這個__init__.py里面規定的導入情況,再去導入其他模塊。
比如你想加載exer1.py模塊,你只需在__init__.py里面寫入from root.exer1.py import * 就能導入exer1.py模塊.
需要注意的是:
1,引入同級模塊需要顯示導入即用from ... import ... ,用import ... 會報錯。且必須要用 ‘.’明確他們的層級關系
2,引入子包需要用import ...引入,且必須要用 ‘.’ 明確他們的層級關系
假如在exer1下有個addf 函數
在交互模式下,想調用exer1下的函數,首先
import root;然后
root.addf();就行了。
如果要在exer11模塊下引入同級模塊,只需在exer12中添加:
import root.pack1.exer12 或者 from root.pack1.exer12 import *
如果要在exer1模塊下引入子包下的其他模塊,只需在exer1中添加:
import root.pack1.exer11 或者 from root.pack1 import exer11
另外還有一個pythonPath 這個知識點:
pythonpath 就是python在裝載模塊時加載路徑,自已可以設置。
當你想引入其他磁盤下的py文件,你就需要往pythonPath 中設置路徑。
首先導入import sys,然后
sys.path.insert(0,路徑);或者sys.path.append('路徑');