【问题标题】:moduleNotFoundError: no module named (*)moduleNotFoundError: 没有名为 (*) 的模块
【发布时间】:2022-01-07 07:56:39
【问题描述】:

 我正在尝试使用 python -m pytest 运行我的测试,但我收到一个错误 ModuleNotFoundError: No module named 'sample' 当使用nosetests 或其他任何东西时它工作正常,但当尝试使用pytest 时,它不起作用。 我的树如下所示,您有什么建议为什么它不起作用?

├── LICENSE.txt
├── README.md
├── data
│   └── data_file
├── exported_register.csv
├── pyproject.toml
├── requirements.txt
├── setup.cfg
├── setup.py
├── src
│   └── sample
│       ├── __init__.py
│       ├── __pycache__
│       │   ├── __init__.cpython-39.pyc
│       │   ├── dziennik.cpython-39.pyc
│       │   ├── przedmiot.cpython-39.pyc
│       │   ├── simple.cpython-39.pyc
│       │   └── uczen.cpython-39.pyc
│       ├── dziennik.py
│       ├── package_data.dat
│       ├── przedmiot.py
│       ├── simple.py
│       └── uczen.py
├── tests
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-39.pyc
│   │   ├── test_ASSERTPY_uczen.cpython-39-pytest-6.2.1.pyc
│   │   ├── test_ASSERTPY_uczen.cpython-39-pytest-6.2.5.pyc
│   │   ├── test_ASSERTPY_uczen.cpython-39.pyc
│   │   ├── test_PYHAMCREST_uczen.cpython-39-pytest-6.2.1.pyc
│   │   ├── test_PYHAMCREST_uczen.cpython-39-pytest-6.2.5.pyc
│   │   ├── test_PYHAMCREST_uczen.cpython-39.pyc
│   │   ├── test_UNITTEST_register.cpython-39-pytest-6.2.1.pyc
│   │   ├── test_UNITTEST_register.cpython-39-pytest-6.2.5.pyc
│   │   ├── test_UNITTEST_register.cpython-39.pyc
│   │   ├── test_UNITTEST_uczen.cpython-39-pytest-6.2.1.pyc
│   │   ├── test_UNITTEST_uczen.cpython-39-pytest-6.2.5.pyc
│   │   ├── test_UNITTEST_uczen.cpython-39.pyc
│   │   ├── test_simple.cpython-39-pytest-6.2.1.pyc
│   │   ├── test_simple.cpython-39-pytest-6.2.5.pyc
│   │   └── test_simple.cpython-39.pyc
│   ├── test_ASSERTPY_uczen.py
│   ├── test_PYHAMCREST_uczen.py
│   ├── test_UNITTEST_register.py
│   ├── test_UNITTEST_uczen.py
│   └── test_simple.py
└── tox.ini

【问题讨论】:

    标签: python pytest modulenotfounderror


    【解决方案1】:

    当您使用 python -m pytest 运行 pytest 时,它使用当前目录作为其工作目录,其中不包含 sample 模块(位于 ./src 内)。我处理这个问题的方法是在我的测试目录中有一个conftest.py,我在其中将我的源目录添加到 python 路径,如下所示:

    import sys
    from pathlib import Path
    
    source_path = Path(__file__).parents[1].joinpath("src").resolve()
    sys.path.append(str(source_path))
    

    【讨论】:

      【解决方案2】:

      我最近开始使用 pytorch 并且遇到了类似的问题。想到几个步骤:

      1. 您如何编写包含测试的 .py 文件?可能只是您需要更改在单元测试文件中导入sample 的方式。我希望你需要像import src.sample.simple 这样的东西。换句话说,这可能只是一个路径问题。
      2. 尝试(更)简单的文件夹结构,然后重试。如果这不起作用,请尝试仅复制某人发布的简单方案的示例。也就是说,让python -m pytest 以某种方式运行,然后开始慢慢增加项目的复杂性。

      【讨论】:

        最近更新 更多