我有这样的结构:
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
正确执行。
如何使用第一个显示的结构在项目中进行覆盖?
答案 0 :(得分:0)
这是因为duplicate symbols for architecture arm64
不是软件包。
要使其作为一个包工作,应在backend
文件夹中创建一个名为__init__.py
的空文件,这样它将可以正常工作。
要详细了解软件包在Python中的工作方式,请check the documentation。
答案 1 :(得分:0)
这里的问题是代码结构和将文件夹制作为模块,以便可以将其导入。
要使任何文件夹作为模块工作,我们需要在其中保留__init__.py文件(为空或需要初始化一些数据)。在导入时,请确保可以从该文件访问它。即它位于同一目录或导出的PYTHONPATH中。
考虑以下结构:
-后端:
-测试:
__ 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