淺談python導入自定義模塊

下面的模塊test1_import中有兩個文件t1.py和t2.py

t1.py的內容如下:

from . import t2

def t1():
    t2.t2()
    
if __name__ == '__main__':
    t1()

t2.py的內容如下:

def t2():
    print("我是test1_import文件夾下的t2")

如果你在t1.py下運行代碼,就會報錯:

from . import t2
ImportError: cannot import name 't2'

原因其實很簡單,首先我們要搞清楚Python是如何搜索模塊的
Python模塊的搜索路徑:

  • 當前主模塊(就是啓動文件)運行所在目錄
  • 環境變量所表示的列表
  • python默認安裝路徑

可以使用下面的方式查看搜索路徑列表:

import sys
print(sys.path)

__name__表示模塊名,在啓動文件中使用相對導入時,__name__ = '__main__',所以這會去尋找__main__.t2這個模塊,很顯然文件夾中是沒有這個模塊的,就會報錯。
如果t1不作爲主模塊(啓動文件),那麼導入t1模塊時,__name__ = test1_import.t1,即模塊名,這是Python區別主模塊和導入模塊的方式。
在運行t1文件的時候,Python會將其所在目錄加入到搜索路徑中,這裏也就是./test1_import/會在sys.path列表中,你想使用t2模塊,不使用相對導入就可以了,即import t2

總結:python應用程序的主模塊(啓動文件)應該總是使用絕對導入。
如何創建一個較好的Python項目文件夾

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章