繼this file structure,我的項目如下所示(簡化):我應該如何將模塊本地導入到項目中?
Project/
|-- project/
|-- test/
|-- test_foo.py
|-- foo.py
使用的最佳做法,我應該怎麼導入foo
從test_foo.py
內?我知道相對進口,但PEP 8 discourages them。
繼this file structure,我的項目如下所示(簡化):我應該如何將模塊本地導入到項目中?
Project/
|-- project/
|-- test/
|-- test_foo.py
|-- foo.py
使用的最佳做法,我應該怎麼導入foo
從test_foo.py
內?我知道相對進口,但PEP 8 discourages them。
在單元測試中,至少對於外部接口來說,更喜歡絕對導入。測試看起來應該儘可能像客戶端代碼一樣,當事情四處移動時,當__init__.py
未正確地從模塊重新導出等時,測試應該會中斷。
從測試中,我總是使用from .. import foo
,因爲它是最簡單的,因此我的測試總是保留在tests/
子包中,因此使得包最容易重構,並且不會中斷。
PEP8上半年討論的相對進口是隱式相對進口:例如,從foo.py
:import test.test_foo
。這些都是不好,還有從來沒有使用它們的一個理由。
否則,唯一的選擇是from project import foo
。