這是一個經常以不同形式提出的問題,並且經常會得到「大聲笑你沒有正確地做它」的反應。可以肯定的是,這是因爲人們(包括我)試圖用作實現有一個常識,而解決方案並不明顯(如果以前沒有這樣做)。使用鼻子進行測試的Python進口 - 當前軟件包的進口模塊的最佳做法是什麼
會接受「讓飛出瓶子」的答案。
鑑於
project/
__init__.py
/code
__init__.py
sut.py
/tests
__init__.py
test_sut.py
其中tests_sut.py開始:
import code.sut
在根目錄運行nosetests導致:
ImportError: No module named code.sut
大道前往:
一)做一個親戚唱
from ..code import sut
b)增加項目的根PYTHONPATH
C)使用
sys.path.append
在每個測試模塊的起始進口之前添加..路徑。
d)只記得做一個
setup.py
對項目運行測試前安裝的模塊到站點包。
所以要求測試位於可以訪問項目的測試包根目錄下。上述每個人對我來說都不覺得「自然」,已經證明存在問題或者看起來像是太辛苦了!
在java中這個工作,但基本上是由你的構建工具/ IDE將所有類放在類路徑上。也許問題是我期待Python的「魔力」?在Flask webframework測試中注意到,選項d)似乎是首選。
在任何情況下,下面推薦一個首選解決方案的陳述都會消除我自己的「不自然」的感覺。
相關http://stackoverflow.com/questions/6323860/sibling-package-imports/6466139#6466139雖然不是一個確切的副本。 – Evpok
這精美地總結了我的情況的80-90% - 如果只是有任何澄清是否virtualenv會改變答案... – sage