没有名为“后端”的模块[pytest coverage]

时间:2019-12-03 19:11:38

标签: python pytest-cov

我有这样的结构:

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

正确执行。

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

3 个答案:

答案 0 :(得分:0)

这是因为duplicate symbols for architecture arm64 不是软件包。

要使其作为一个包工作,应在backend文件夹中创建一个名为__init__.py的空文件,这样它将可以正常工作。

要详细了解软件包在Python中的工作方式,请check the documentation

答案 1 :(得分:0)

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

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

考虑以下结构:

-后端:

  • __ init__.py
  • app.py

-测试:

  • __ init __。py

  • main.py

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

from ..backend.app import soma

请注意上面导入行中后端模块之前的额外 .. 。该模块有助于Python解释器从backend / app.py文件中查找体。

答案 2 :(得分:0)

如@DiegoQueiroz和@ HNMN3所述,您应确保目录为python软件包。

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

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

鉴于您的项目结构,您可以输入以下命令:

pytest -v --cov=backend.app tests/test_app