[問題] Relative Import

作者: walelile (wakaka)   2014-10-03 19:59:51
目前我有個project結構如下
proj/
pkg/
moduleA.py
test/
test.py
我希望達到的目的是:
1. 在test.py可以import moduleA裡面的class XXX
2. 可以直接執行test.py (e.g. $ python test.py)
根據PEP 328的說法
在test.py中加入 from ..moduleA import XXX
然後切換至proj這個目錄下, 執行 $ python -m pkg.test.test
這樣可以執行, 但是無法使用 $ python test.py
而在PEP 366, 看起來似乎修改 __package__ 搭配sys.path,
才能直接執行$ python test.py
我目前主要的疑惑是,既然都要改sys.path,似乎就不需要relative import ?
我在test.py裡改成
sys.path.append("<path to proj>/pkg/")
from moduleA import XXX
這樣就可以直接執行 $ python test.py
是否有其他比較妥善的做法?
謝謝指教
※ 編輯: walelile (1.171.166.210), 10/03/2014 20:20:05
作者: uranusjr (←這人是超級笨蛋)   2014-10-03 21:17:00
Relative import 無法從 main 往外所以只能用 sys.path要嘛加 sys.path 要嘛就只能改結構, 哪個比較好就看需求
作者: walelile (wakaka)   2014-10-03 22:22:00
了解 謝謝
作者: timTan (用口頭禪區分年記)   2014-10-04 00:50:00
是不是用test runner 比較順手,用看看 PY.test
作者: walelile (wakaka)   2014-10-04 01:20:00
是指unittest嗎?
作者: timTan (用口頭禪區分年記)   2014-10-04 08:07:00
作者: walelile (wakaka)   2014-10-04 08:53:00
ok, 感謝

Links booklink

Contact Us: admin [ a t ] ucptt.com