首頁 >後端開發 >Python教學 >將模組作為腳本運行時如何處理 Python 套件中的相對導入?

將模組作為腳本運行時如何處理 Python 套件中的相對導入?

Barbara Streisand
Barbara Streisand原創
2024-12-29 15:25:11815瀏覽

How to Handle Relative Imports in Python Packages When Running Modules as Scripts?

Python 3 中的相對導入

嘗試從同一目錄中的另一個檔案匯入函數時,使用from .mymodule import myfunction 或from mymodule import myfunction 可以導致錯誤。原因在於包含要匯入的函數的模組是否位於套件內。

使用相對導入

當模組位於包內時,相對導入起作用。若要建立包,包含模組的目錄中必須存在 __init__.py 檔案。然而,確保模組有時可以作為腳本運行也很重要。

程式碼結構

包含多個模組和主腳本的套件的常見佈局如下如下:

  • main.py
  • mypackage/

    • __init__。 py
    • mymodule.py
    • myothermodule.py

內mymodule.py:

# Exported function
def as_int(a):
    return int(a)

# Test function for module  
def _test():
    assert as_int('1') == 1

if __name__ == '__main__':
    _test()
內mymodule.py:

內mymodule.py:
# Import exported function from the mymodule
from .mymodule import as_int

# Exported function
def add(a, b):
    return as_int(a) + as_int(b)

# Test function for module  
def _test():
    assert add('1', '1') == 2

if __name__ == '__main__':
    _test()
# Import exported function from myothermodule
from mypackage.myothermodule import add

def main():
    print(add('1', '1'))

if __name__ == '__main__':
    main()
在main.py 中:

執行程式碼

執行main.py 或mypackage/mymodule.py 時,程式碼執行沒有問題。但是,嘗試執行 mypackage/myothermodule.py 會導致與所使用的相對導入相關的錯誤(from .mymodule import as_int)。

替代方法

    有兩種替代方法可以解決此問題:
  1. 使用絕對導入:
  2. 用絕對導入相對導入通過指定完整模組路徑:from mypackage.mymodule import as_int。但是,這需要將套件的父目錄新增到 PYTHONPATH 中。
  3. 使用 -m 選項:
若要避免使用絕對導入,同時確保模組正確運行,請使用 - Python 的 m 選項:python3 -m mypackage.myothermodule。此方法需要從套件的父目錄執行命令。

以上是將模組作為腳本運行時如何處理 Python 套件中的相對導入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn