相关疑难解决方法(0)

pytest的问题'导入错误:没有名为YadaYadaYada的模块'

我使用easy_install在mac上安装pytest并开始为具有文件结构的项目编写测试,如下所示:

repo/
repo/app.py
repo/settings.py
repo/models.py
repo/tests/
repo/tests/test_app.py
Run Code Online (Sandbox Code Playgroud)

py.test在repo目录中运行时,一切都按预期运行

但是当我在linux或windows上尝试相同的东西时(两者都有pytest 2.2.3),每当它从我的应用程序路径首次导入某些东西时就会吠叫.比如说from app import some_def_in_app

我是否需要编辑我的PATH才能在这些系统上运行py.test?有没有人经历过这个?

python unit-testing pytest

194
推荐指数
12
解决办法
14万
查看次数

pytest 的 ModuleNotFoundError

我希望我的测试文件夹与我的应用程序代码分开。我的项目结构是这样的

myproject/
  myproject/
    myproject.py
    moduleone.py
  tests/
    myproject_test.py
Run Code Online (Sandbox Code Playgroud)

我的项目.py

from moduleone import ModuleOne

class MyProject(object)
....
Run Code Online (Sandbox Code Playgroud)

myproject_test.py

from myproject.myproject import MyProject
import pytest

...
Run Code Online (Sandbox Code Playgroud)

我使用myproject.myproject因为我使用命令

python -m pytest
Run Code Online (Sandbox Code Playgroud)

从项目根目录 ./myproject/

但是,然后这些模块中的导入失败

E ModuleNotFoundError: 没有名为“moduleone”的模块

我正在运行 Python 3.7 并已阅读自 3.3 以来,__init__不再需要空文件,这意味着我的项目成为隐式命名空间包

但是,我尝试在其中添加__init__.py文件myproject/myproject/并尝试在其中添加conftest.py文件myproject/但都不起作用

我已经阅读了一些答案,这些答案说要弄乱路径,然后在其他问题中投票说不要

什么是正确的方法,我错过了什么?

编辑;

可能相关,我使用 arequirements.txt使用 pip 安装 pytest。这可能有关系吗?如果是这样,在这种情况下安装 pytest 的正确方法是什么?

编辑2:

其中的路径之一sys.path …

python pytest python-3.x docker

32
推荐指数
8
解决办法
2万
查看次数

如何使用 pytest 解决 ImportError

已经 有人对此主题提出疑问有时程序员会__init__.py在某些地方放置一些路径,通常有人说应该使用绝对路径。但是,我无法让它在这里工作:

\n

如何从包中导入类以便 pytest 中的测试运行并可以使用代码?

\n

目前我得到 pytest 或通过各自运行的代码。

\n

我的示例项目结构是

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 testingonly\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cli.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 testingonly.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_testingonly.py\n
Run Code Online (Sandbox Code Playgroud)\n

__init__.py在这两种情况下都是空文件。

\n
$ cat testingonly/cli.py\n"""Console script for testingonly."""\nfrom testingonly import Tester\n\ndef main(args=None):\n    """Console script for testingonly."""\n    te = Tester()\n    return 0\n\nmain()\n
Run Code Online (Sandbox Code Playgroud)\n
$ cat testingonly/testingonly.py\n"""Main module."""\nclass Tester():\n    def __init__(self):\n        print("Hello")\n
Run Code Online (Sandbox Code Playgroud)\n

正如预期的那样:

\n
$ python3 testingonly/cli.py\nHello\n
Run Code Online (Sandbox Code Playgroud)\n

然而,尝试测试这一点失败了:

\n
$ pytest\n========================================================= test session starts =========================================================\nplatform linux -- …
Run Code Online (Sandbox Code Playgroud)

python python-import pytest

8
推荐指数
1
解决办法
2万
查看次数