使用 pytest 時,常常會因為路徑問題而遇到 ImportError 異常。這在不同的作業系統和專案結構中尤其普遍。讓我們解決這個問題並探索潛在的解決方案。
解決路徑問題的有效方法是利用 conftest.py 檔案。 Pytest 在測試收集期間搜尋 conftest 模組以收集自訂掛鉤和固定裝置。透過將空的 conftest.py 檔案放置在專案的根目錄(執行 pytest 的位置)中,pytest 會自動將父目錄新增至 sys.path,使您的應用程式模組可供匯入。
對於這樣的專案結構:
repo/ |--app.py |--settings.py |--models.py |--tests/ |--test_app.py
只要將一個空的conftest.py 檔案加入repo/
對於最新版本的pytest(7及更高版本),更方便的解決方案是利用 pythonpath 設定。這允許您直接透過 pytest 設定修改 sys.path。在 pyproject.toml 或 pytest.ini 檔案中,加入以下內容:
[tool.pytest.ini_options] pythonpath = ["."]
這是一種更簡潔的方法,不需要任何自訂程式碼或對 sys.path 進行操作。
專案結構:根據情況調整conftest.py檔案或pythonpath配置的位置你的專案結構。例如,在典型的基於 src 的佈局中,將 conftest.py 放在 src 目錄中,而不是根目錄中。
src 佈局: 將 src 加入 PYTHONPATH 時要小心。它可能會破壞使用 src 佈局的好處,因為您最終測試的是儲存庫程式碼而不是已安裝的套件。
以上是如何解決由於路徑問題導致的 pytest 中的'ImportError: No module name...”問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!