一、基本概念
在編寫項目時,經常需要引用其他模塊中的代碼或者數據,而這些文件可能不在當前目錄下,這時就需要使用到Python導入文件的功能。Python的模塊搜索路徑是按照一定的順序進行查找的,常見的查找方式有相對導入和絕對導入兩種方式。
二、相對導入
相對導入是指在文件中通過”.”和”..”來指定文件或模塊的相對路徑,類似於Linux系統中的路徑表示方式。比如當前文件在目錄`/A/B`下,需要引用文件`/A/C/D.py`中的函數,則可以通過相對導入的方式引用:`from ..C.D import function_name`。其中,’..’表示上一級目錄;’.’表示當前目錄。為實現相對導入,必須要將當前目錄設置為模塊搜索路徑中的一部分。在Python3.3版本之前,要實現相對導入,必須在文件頭部加上標識:`from __future__ import absolute_import`。從Python3.3版本開始,相對導入默認開啟,不需要顯示地聲明。
. ├── A │ ├── __init__.py │ ├── B │ │ └── file1.py │ └── C │ ├── __init__.py │ └── D.py └── test.py
例如在文件`/A/test.py`中引用文件`/A/C/D.py`中的函數,可以使用相對導入的方式:
from .C.D import function_name
三、絕對導入
絕對導入是指在文件中指定路徑,從跟路徑開始計算。絕對導入主要用於引入Python標準庫中的模塊以及第三方庫中的模塊。
當需要導入其他目錄下的文件時,就需要將該目錄添加到模塊搜索路徑中。在Python中可以通過修改系統環境變數PATH或者修改sys.path來實現。
在使用絕對導入時,需要根據具體情況在代碼中指定絕對路徑,這需要深入了解文件系統結構。比如,要引用目錄`/A/B`下的文件`/C/D.py`,可以在代碼中加上如下語句:
import sys sys.path.append('/A/B') # 或者使用路徑名 # sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/A/B') from C.D import function_name
四、包結構
Python項目通常包括多個模塊,這些模塊按照一定的目錄結構進行組織以形成包結構。在Python中,一個目錄只有包含一個特殊的__init__.py文件,才能被作為包使用。
在包的組織中,每個目錄都應該包含一個__init__.py文件,這個文件定義了該包的公開介面。可以在__init__.py中導入包中的其他模塊,並且可以使用相對導入和絕對導入兩種方式進行導入。如果包的路徑不在sys.path中,需要先將路徑添加到sys.path中。
myproject/ ├─ __init__.py ├─ module1/ | ├─ __init__.py | ├─ module1.py | └─ ... ├─ module2/ | ├─ __init__.py | ├─ module2.py | └─ ... └─ test.py
在文件`/myproject/test.py`中需要引用文件`/myproject/module1/module1.py`中的函數,這時需要先將myproject添加到sys.path中:
import sys sys.path.append('/path/to/myproject') from module1.module1 import function_name
五、總結
本文介紹了Python導入上級目錄下的文件,主要介紹了相對導入和絕對導入兩種方式,並且講解了包結構的概念。在使用Python時,需要注意模塊搜索路徑、相對導入、絕對導入和包結構等問題,才能正確地引用需要的文件和模塊。
原創文章,作者:HOWVP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/361782.html