包和模塊的導入問題

本質:導入模塊的本質就是把python文件解釋一遍,
         導入包的本質就是把包文件下面的init.py文件運行一遍。
 
         1)同目錄下模塊的導入
            #同級目錄下模塊的導入
 
            import module_name   #直接導入模塊
            import module1_name,module2_name  #導入多個模塊  使用:模塊名.函數名
            from modeule_name import * #導入模塊中全部函數和變量等。。。不推薦使用
            from modeule_name import m1,m2,m3 #只導入模塊中函數m1,m2,m3 使用:直接使用m1,m2,m3就能夠
            from modeule_name import m1 as m #導入module_name模塊中函數m1而且將函數從新複製給m 使用:直接用調用m
 
         2)不一樣目錄下模塊的導入
            #不一樣目錄下模塊的導入  當前文件main.py
 
            #目錄結構
            # ├── Credit_card
            # │
            # ├── core 
            # │   ├── __init__.py
            # │   └── main.py  # 當前文件
            # ├── conf 
            # │   ├── __init__.py
            # │   └── setting.py
            # │   └── lzl.py
             
            import sys,os
            #獲取當前目錄的上上級目錄絕對路徑,也就是Credit_card
            credit_card_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
            #把Credit_card目錄加入到系統路徑
            sys.path.insert(0,credit_card_path)
 
            #查看系統環境路徑
            print(sys.path)
 
            例子:
                若是main文件夾要用conf文件夾下的setting文件,直接導入是不行的
                應該:
                    fron conf import setting
                    setting.函數名()  #這樣執行setting模塊中的函數
 
        3)不一樣目錄下模塊連環導入
            #不一樣目錄多個模塊之間互相導入
 
            #目錄結構
            # ├── Credit_card
            # │
            # ├── core 
            # │   ├── __init__.py
            # │   └── main.py  # 當前文件
            # ├── conf 
            # │   ├── __init__.py
            # │   └── setting.py
            # │   └── lzl.py
 
            若是在setting文件中調用模塊lzl.py,能夠用語句 import lzl,可是若是這樣,
            咱們在main.py文件中調用setting文件時,就會報錯#ImportError: No module named 'lzl'
            這個時候咱們須要將 import lzl  換爲  from . import lzl
            而後main.py文件中調用setting文件時,才能夠正常執行。
 
        4)不一樣目錄多個模塊相互導入,用相對路徑
 
            Root
                ├── Credit_card
                        ├── README.md
                        ├── core
                        │   ├── __init__.py
                        │   └── main.py
                        ├── conf
                        │   ├── __init__.py
                        │   └── setting.py
                        │   └── lzl.py    
 
 
            lzl.py文件內容:  
                    def name():
                        print("name is lzl")
 
            setting.py文件內容:
                    #當前文件settings,調用lzl.py模塊  相對路徑
                    from . import lzl       #經過相對路徑導入模塊lzl
                    def set():
                        print("in the settings")
                        lzl.name()   #運行lzl模塊下的函數
 
                    set()  #執行函數set
 
            Core目錄下的文件中的mian.py文件內容:
                    #不一樣目錄之間連環import 當前文件main.py  相對路徑
 
                    from Root.Credit_card.conf import settings
                    settings.set()   #執行settings下的函數
 
 
            注意:
                lzl.py以及settings.py文件未變,main.py文件去掉了繁雜的sys.path添加的過程,
                直接執行from Root.Credit_card.conf import settings,使用相對路徑,更加
                簡潔方便!
相關文章
相關標籤/搜索