1
thedevil5032 2013-08-10 22:52:17 +08:00 via iPad
|
2
tioover OP @thedevil5032 这样有点丑……
|
3
iEverX 2013-08-10 23:52:11 +08:00 1
python3 a.py,则a.py是最顶级的模块,只能找到b.py,以及__init__.py,不知道test是个什么东西,所以。。
而后面的 from . import b,这种引用,由于a.py是作为__main__的,是不允许的 http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python |
4
reorx 2013-08-11 00:29:41 +08:00 1
1. segmentfault 中 felix021 和 detailyang 的回答都是错误的(依云的答案是对的),对包内模块的引用使用 from b import c 的形式是绝对错误的,仅有 from .b import c 和 from test.b import c 是正确的。
2. 之所以没找到 test 包是因为你在 test/ 下运行 a.py,test/ 的确在系统路径中,但 test/ 的上级目录不在,所以 test/ 依然是找不到的。包内模块作为运行入口本就不是好的选择,最佳实践方案应该是单独写一个脚本 from test import a 来做些什么,或者在 test/ 的上级目录运行 python -m test.a,这样将包整个进行调用,避免在包内直接运行。 2. 看一下 pep 328 |
5
reorx 2013-08-11 00:32:41 +08:00 3
补充一点在 test/a.py 中 from b import c 或者 import b 之所以是错的,是因为这样是把 b 当作模块命名空间的顶级,也就是包来调用,而 b 只是 test 包中的模块,因此极为容易引发各种错乱。
|
7
felix021 2013-08-11 00:55:51 +08:00
|