[英]Py.test No module named *
我有这样的文件夹结构
App
--App
--app.py
--Docs
--Tests
--test_app.py
在我的test_app.py file
中,有一行用于导入我的应用程序模块。 当我在根文件夹上运行 py.test 时,我收到关于没有名为 app 的模块的错误。 我应该如何配置这个?
使用 Python 3 并在类似的项目布局上遇到相同的错误,我通过向我的tests
模块添加一个__init__
文件来解决它。
$ touch tests/__init__.py
我不擅长打包和导入,但我认为这有助于pytest
确定目标App
模块所在的位置。
我已经在/App/App
目录中有一个__init__.py
文件,并希望从项目根目录运行测试而没有任何路径修改魔法:
python -m pytest tests
输出立即如下所示:
➟ python -m pytest tests
====================================== test session starts ======================================
platform linux -- Python 3.5.1, pytest-2.9.0, py-1.4.31, pluggy-0.3.1
rootdir: /home/andrew/code/app, inifile:
plugins: teamcity-messages-1.17
collected 46 items
... lines omitted ...
============================= 44 passed, 2 skipped in 1.61 seconds ==============================
所以你正在从/App
运行py.test
。 您确定/App/App
在您的$PYTHONPATH
吗?
如果不是,尝试import app
代码将失败并显示此类消息。
EDIT0:为了完整性,包括我下面评论中的信息。
导入 app 的尝试只有在/App/App
执行时才会成功,这里不是这种情况。 您可能希望通过将__init__.py
放入其中来使/App/App
成为一个包,并将您的导入更改为from App import app
限定为from App import app
。
EDIT1:根据要求,从我下面的第二条评论中添加进一步的解释。
通过将__init__.py
放在/App/App
,该目录成为一个包。 这意味着您可以从中导入,只要它 - 目录 - 在$PYTHONPATH
可见。 也就是说,如果/App
在$PYTHONPATH
中,您可以从App import app
/App
。 您当前的工作目录会自动添加到$PYTHONPATH
,因此当您从/App
运行脚本时,导入将起作用。
我遇到了类似的问题,不得不从根目录中删除__init__.py
并将__init__.py
添加到tests
文件夹中。
在为我的应用程序运行测试用例时,我也遇到了同样的错误,如下所示
myproject
--app1
--__init.py__
--test.py
--app2
--__init.py__
--test.py
--__init.py__
我删除了myproject 的init.py文件来运行我的测试用例。
您也可以将一个空的conftest.py
文件添加到您的根应用程序文件夹中。
(如果你看一下问题文件夹结构,那将与“测试”文件夹处于同一级别,而不是在其中) 。
Pytest 在所有项目文件夹中查找conftest.py
文件。
conftest.py
为 pytest 在其中找到它的文件树提供配置。因为 pytest 以某种方式扫描从 conftest.py 文件夹开始的所有子目录,它应该在测试文件夹之外找到包/模块(只要 conftest.py 文件在您的应用程序中)根文件夹)。
最后,您可能想在空的 conftest.py 中编写一些代码,专门用于在不同的测试文件之间共享 fixture,以避免重复代码。 毕竟,在编写测试时也应该遵循 DRY 原则(不要重复自己)。
将__init.py__
添加到测试文件夹也应该有助于 pytest 在整个应用程序中查找模块。 但是,请注意 Python 3.3+ 具有隐式命名空间包,允许它创建没有__init__.py
文件的包。 也就是说,为此特定目的创建__init__.py
文件似乎更像是 pytest 的解决方法,而不是 python 要求。 更多相关信息: Is __init__.py not required for packages in Python 3.3+
使用python -m pytest
命令运行pytest
有助于解决这个问题。
由于您当前的包尚未在您的$PYTHONPATH
或sys.path
- pytest 收到此错误。
通过使用python -m pytest
您会自动将工作目录添加到sys.path
以运行pytest
。 他们的文档还提到:
这几乎相当于调用命令行脚本
pytest
我得到了类似的问题。 在尝试了包括在虚拟环境上安装 pytest 和从包中添加/删除__init__.py
文件在内的多种方法之后,没有一个对我有用。
对我有用的解决方案是(Windows 解决方案):将项目文件夹(不是包文件夹)添加到 python 路径(设置 PYTHONPATH=%PYTHONPATH%;%CD%)
从项目文件夹和繁荣运行我的脚本,它起作用了。
我有这样的文件夹结构
App
--App
--app.py
--Docs
--Tests
--test_app.py
在我的test_app.py file
,有一行要导入我的应用程序模块。 在根文件夹上运行py.test时,出现此错误,提示没有名为app的模块。 我应该如何配置呢?
这对我有用:转到父应用程序,然后pip install -e .
(安装本地和可编辑的应用程序)。
对我有用的是:我必须在我的测试文件中进行绝对导入,并在根文件夹中调用python -m test
。
我遇到了同样的问题。
my-app
--conf
--my-app
--tests
我设置了__init__.py
文件。 我添加了一个conftest.py
(用于共享pytest.fixtures
)。 我将其添加到我的诗歌文件( pyproject.toml
:
[tool.pytest.ini_options]
pythonpath = [
"."
原来这是我使用连字符而不是下划线。 不……
# pytest can't find Module
--my-app
# works
--my_app
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.