0

我有这样的结构:

myProj
 --backend
   --app.py
 --tests
   --test_app.py

当我运行命令时:

pytest -v --cov=.tests/test_app

我得到:

    tests/test_app.py:1: in <module>
    from backend.app import soma
E   ModuleNotFoundError: No module named 'backend'

为什么不能导入库?

当结构是这样的:

myProj
  --app.py
  --test_app.py

正确执行。

如何使用第一个显示的结构在我的项目中运行覆盖?

4

3 回答 3

1

正如@DiegoQueiroz 和@HNMN3 所提到的,您应该确保您的目录是python 包。

在后端测试目录中添加__init__.py文件。

然后,您需要module在命令中提及名称。

给定您的项目结构,您可以输入以下命令:

pytest -v --cov=backend.app tests/test_app
于 2020-02-13T13:29:12.003 回答
1

这是因为backend不是包。

要使其作为一个包工作,您应该在文件夹__init__.py内创建一个名为的空文件backend,以便它按预期工作。

要了解更多关于包如何在 Python 中工作的信息,请查看文档

于 2019-12-03T19:17:05.500 回答
1

这里的问题是代码结构并将文件夹制作为模块以便可以导入。

为了使任何文件夹都作为模块工作,我们需要在其中保留 __init__.py 文件(为空或带有一些要初始化的数据)。在导入它时,请确保它可以从该文件中访问。即它要么在同一目录中,要么在导出的 PYTHONPATH 中。

考虑以下结构:

-- 后端:

  • __init__.py
  • 应用程序.py

-- 测试:

  • __init__.py

  • 主文件

这里的后端和测试是目录,如果你想从 app.py 文件中导入 main.py 文件中的内容,它将如下所示:

from ..backend.app import soma

请注意上面导入行中后端模块之前的额外..,它帮助 Python 解释器从 backend/app.py 文件中找到 soma。

于 2019-12-03T19:22:43.427 回答