part1 主程序與待導入模塊在統一目錄下
下面的介紹的前提
1、新建cc.py
2、假設已經存在aa.py,且cc.py與aa.py在同級目錄下
3、假設aa中有函數bb
4、想在在cc中導入aa的方法
1、from modulename import functionname(or *)
(前一種導入特定函數語句,後一種導入所以該模塊下的函數)
from aa import bb(or from aa import *)
bb #(這樣調用bb函數)
2、import modulename
(缺點使用該模塊下的函數時,需要聲明這個模塊的命名空間)
import aa
aa.bb #(這樣調用bb函數)
part2 主程序與待導入模塊不在統一目錄下
上面介紹的是導入模塊與主程序在同級目錄下的情況,下面介紹不同級目錄
明確一點:py找模塊時候,只會在sys.path中的路徑找,sy路徑已經自動中存在當前主程序的目錄,但找module時只會查找py文件,不會搜索當前目錄的子目錄,解決方法後面會說
ps、如何查看sys.path?
import sys
print(sys.path)
1、待導入模塊在主程序目錄下的一個目錄(dir代表目錄,mod代表模塊)
--dir1
--mod1.py(主程序)
--dir2
--mod2.py(待導入模塊)
之前說到找模塊時不會在當前目錄(dir1)下的子目錄找(dir2),所以按照之前part1中所用的import mod2
會引起錯誤
解決方法:在dir2下新建__init__.py
--dir1
--mod1.py(主程序)
--dir2
--__init__.py
--mod2.py(待導入模塊)
這樣就會在dir2下找模塊了
import dir2.mod2
2、待導入模塊在主程序目錄上的一個目錄(dir代表目錄,mod代表模塊)
--dir1
--mod1.py(待導入模塊)
--dir2
--mod2.py(主程序)
解決方法:在sys.path中添加父目錄
import sys
sys.path.append('..')
import mod1
part3總結
1、找模塊是在sys.path中找,且當前目錄默認存在,不會搜索下一層目錄與上一層目錄,解決方法參考上面
2、注意module!=function!=dir