【发布时间】:2016-01-25 10:20:57
【问题描述】:
我有以下目录树(Python 2.7):
./pkg
./main.py
./A
./a.py
./B
./b.py
./C
./c.py
a.py、b.py和c.py需要相互导入,所以我有两种选择:
使用相对导入,这意味着我必须从 ./pkg/main.py 或目录树顶部的其他文件启动程序。 这真的很好,但是当我对其中一个文件编写测试时问题就开始了。我无法在 ./main/A 中编写导入 a.py 的测试,因为 a.py 无法使用 b.py 和 c.py,所以唯一的方法是在 . /main.
将每个文件中 ./main 的绝对路径添加到 sys.path。这意味着我必须为所有文件编写相同的三行,如果我有 300 个文件而不是 3 个文件,那会很痛苦(而且很可能不是最佳选择)。
那么,我该怎么办?
【问题讨论】:
-
将
./pkg(作为绝对路径)添加到PYTHONPATH做你想做的事吗? PS。你的包目录中有__init__.py文件吗? -
这就是为什么测试通常位于项目顶层的单独目录中,允许它们从
pkg上方运行。这意味着测试实际上是在测试您的包将如何在实践中使用。 -
是的,
./pkg中有一个__init__.py。即使测试位于单独的目录中,如果我从运行单个测试开始,它也无法进入其他目录。 -
@YanayTevet “它无法进入其他目录” - 什么?为什么不?您遇到的实际错误是什么?如果您有
__init__.py文件,请显示它们。看看例如jeffknupp.com/blog/2013/08/16/… 用于合理的项目结构。
标签: python python-2.7 import python-unittest relative-import