首页 > 解决方案 > 测试目录中的相对导入

问题描述

我典型的 Python 项目结构看起来像

setup.py
foobar/
    __init__.py
    main.py
    something_else.py
    helpers.py
test/
    addition/
        test_consistency.py
        test_speed.py
    subtraction/
        test_consistency.py
        test_speed.py

这很好用。

然后我注意到加法和减法测试共享相当多的代码、复杂的断言等。我试图将代码移动到帮助文件中

test/
    helpers.py
    addition/
        test_consistency.py
        test_speed.py
    subtraction/
        test_consistency.py
        test_speed.py

并从加法/减法中导入,例如

from .. import helpers 

但这失败了

E   ImportError: attempted relative import with no known parent package

好吧,测试文件夹不是“包”,相对导入不起作用。 一个著名的 Python 问题。

如何在加法和减法子文件夹之间共享代码?平面目录结构不是一种选择。(在现实生活中,文件夹结构比上面的例子更复杂。)

奇怪的是,我注意到 pyscaffoldin 中的相对导入有作用tests/,请参见此处。他们是怎么做到的?

标签: pythonrelative-import

解决方案


推荐阅读