關於python中對模組的呼叫
阿新 • • 發佈:2018-12-14
簡介
在python中經常需要各模組相互呼叫,此時會出現以下幾種情況:
(1)同一目錄下檔案的呼叫
(2)父目錄呼叫子目錄中的檔案
(3)不同目錄下檔案的呼叫
示例
現有該目錄結構:AB中有A、B兩個子目錄,AB自身有檔案AB1.py
__init__.py:空檔案
A1.py:有兩個函式A_test01()和A_test02()
B2.py:有兩個函式B_test01()和B_test02()
(1)同一目錄下的檔案呼叫
實現A2呼叫A1中的A_test01()
import:將import後面的程式碼進行解釋
方法1:
from A1 import * A_test01()
方法2:
from A1 import A_test01
A_test01()
方法3:
import A1
A1.A_test01()
(2)父目錄呼叫子目錄
AB1.py呼叫B1.py中的B_test01函式
方式1
from B import B1
B1.B_test01()
方式2
from B.B1 import B_test01
B_test01()
方式3
from B.B1 import *
B_test01()
方式4
因為B是一個包,當import一個包時,就是呼叫包下面的__init__.py檔案 因此需要在B下面的__init__.py檔案中新增 from . import B1 使得可以在__init__中呼叫子函式 在AB1.py中 import B B.B1.B_test01()
(3)子級呼叫父級別,或子級呼叫子級
在A1.py檔案中呼叫B下B1.py中的函式B_test01
當兩個函式不是同級目錄或被呼叫函式不是呼叫函式的子函式時候,需要新增環境變數
import os,sys print(sys.path) #可以檢視當前系統的環境變數 結果: ['/home/kiosk/PycharmProjects/untitled/AB/A', '/home/kiosk/PycharmProjects/untitled', '/usr/local/python/lib/python36.zip', '/usr/local/python/lib/python3.6', '/usr/local/python/lib/python3.6/lib-dynload', '/usr/local/python/lib/python3.6/site-packages']
將AB的所在目錄新增到環境變數中,在AB所在的目錄在取尋找B目錄
import os,sys
print(os.path.abspath(__file__))
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
執行結果:
/home/kiosk/PycharmProjects/untitled/AB/A/A1.py
/home/kiosk/PycharmProjects/untitled/AB
#已經找到了AB的絕對路徑
將AB的絕對路經新增到環境變數中
import os,sys
e=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,e)
print(sys.path)
執行結果:
['/home/kiosk/PycharmProjects/untitled/AB', '/home/kiosk/PycharmProjects/untitled/AB/A', '/home/kiosk/PycharmProjects/untitled', '/usr/local/python/lib/python36.zip', '/usr/local/python/lib/python3.6', '/usr/local/python/lib/python3.6/lib-dynload', '/usr/local/python/lib/python3.6/site-packages']
#可以看到AB的絕對路徑已經新增到環境變數中,因為環境便利是一個列表,因此可以使用insert新增到第一位
完整程式碼
# _*_ coding:utf-8 _*_
import os,sys
e=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,e)
from B.B1 import *
B_test01()
執行結果:
this is B_test01!!