【问题标题】:python's imports doesn't support unittestingpython导入不支持单元测试
【发布时间】: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需要相互导入,所以我有两种选择:

  1. 使用相对导入,这意味着我必须从 ./pkg/main.py 或目录树顶部的其他文件启动程序。 这真的很好,但是当我对其中一个文件编写测试时问题就开始了。我无法在 ./main/A 中编写导入 a.py 的测试,因为 a.py 无法使用 b.py 和 c.py,所以唯一的方法是在 . /main.

  2. 将每个文件中 ./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


【解决方案1】:

使用相对导入。

如果 pkg 是您项目的根路径,请使用:

python -m unittest A.a

使导入工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2018-07-18
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    相关资源
    最近更新 更多