python模塊可以相對導入和絕對導入,但這兩者是不能替換使用的。本文主要討論工作目錄下模塊之間的導入規則。其中相對導入前面有一個'.',表示從該腳本所在目錄開始索引,而絕對導入前面沒有'.',表示從根目錄開始索引。首先明確一點,python認爲的根目錄爲當前運行的腳本所在的目錄,而不是vscode打開的工作目錄的根目錄。則基於python運行時的根目錄,python模塊導入主要依據以下三個規則:
1、對於需要通過根目錄的導入路徑,必須使用絕對路徑,否則出錯。
2、對於根目錄以下子目錄模塊之間的導入,此時沒有通過根目錄,則必須使用相對路徑,否則出錯。
3、無法導入根目錄的父目錄及以上目錄中的模塊。
比如,vscode打開如下名爲import_test的目錄:
d1
--__init__.py
--d1p1.py
--d1p2.py
--d11
----__init__.py
----d11p1.py
----d11p2.py
d2
--__init__.py
--d2p1.py
--d21
----__init__.py
----d21p1.py
main.py
當運行main.py時,此時根目錄爲import_test:
1、如果main.py需要導入d1p1.py中的模塊,則必須使用絕對導入。
2、如果d1p1.py需要導入d11p1.py中的模塊,則必須使用相對導入。
3、如果d1p1.py需要導入d2p1.py中的模塊,則必須使用絕對導入。
當運行時d1p1.py時,此時根目錄爲d1:
1、如果d1p1.py需要導入p11p1.py中的模塊,則必須使用絕對導入。
2、如果d11p1.py需要導入d11p2.py中的模塊,則必須使用相對導入。
3、如果d11p1.py需要導入d1p2.py中的模塊,則必須使用絕對導入。
4、d1p1.py無法導入d2目錄下和main.py中的模塊。