访问父文件夹中的模块

Accessing module in parent folder

我试图实现我在 tutorial on Real Python 中看到的东西。在教程中有一个测试模块(或者你称之为测试文件?)在目录 test/ 中,代码在目录 rptodo/ 中,测试文件导入要测试的对象from rptodo import __app_name__, __version__, cli。这本身并不 运行;发生错误 ModuleNotFoundError: No module named 'rptodo'。但这确实允许 pytest 运行 代码。然后我尝试用我自己的示例代码重做这个,即使在 pytest 中我也得到同样的错误。我在创建模块时做错了什么?

我的文件夹结构:

Anywhere
-here
--test_this.py
-there
--__init__.py
--yonder.py

yonder.py

class That:
    thing = 'something'

test_this.py

from there.yonder import That

def test_this():
    this = That()
    print(this.thing)

test_this()

我在 Whosebug 的一个 similar questions 中找到了答案,但是 un-intuitive 我觉得有必要 post 在这里找到答案。

必须通过创建文件__init__.py将包含测试的文件夹打包。 Pytest 然后知道查看所需对象所在的模块包的父文件夹。

具有讽刺意味的是,被引用的文件夹不需要找到 __init__.py 文件作为导入模块。只有进行调用的当前文件夹需要是具有 __init__.py .

的模块

不仅从不同文件夹导入模块时,即使从 current 文件夹访问模块时,pytest 也需要该文件夹有一个 __init__.py 文件能够导入带有测试代码的文件。