ModuleNotFoundError: модуль не назван

Я хочу выполнить тест API. Я отправляю изображение и получаю json, содержащий прогнозы. Я создал скрипт app/api.py, который содержит метод отправки изображения и получения ответа.

Не могу запустить тест, выдает ошибку
Я стою у истоков своего проекта

λ python -m unittest test/test_api.py
ModuleNotFoundError: No module named 'test/test_api'

Дерево проекта:
-приложение
-- апи.py
-тест
-- test_api.py

import unittest
from unittest.mock import Mock, patch
import os, sys

# Add the 'app' directory to the Python path
current_dir = os.path.dirname(os.path.abspath(__file__))
app_dir = os.path.join(current_dir, 'app') 
sys.path.append(app_dir)

from api import API

class TestAPI(unittest.TestCase):
    def test_api_call(self):
        // create a mock
        ...
        api = API()
        with patch('requests.post', return_value=mock_response):
           response = api.getPredFromImg(image_path)
        // Assert
        ... 

if __name__ == "__main__":
    unittest.main()

@Clasherkasten, спасибо за помощь.

dia05 22.07.2023 16:18

Можете ли вы поместить пустой файл __init__.py в тестовую папку?

hacker315 22.07.2023 20:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проблема может быть связана с тем фактом, что каталоги, которые вы называете модулями, на самом деле, так сказать, в глазах Python не что иное, как простые каталоги. Чтобы интерпретатор воспринимал их как модули, вам нужно включить файл __init__.py в каждый каталог, в котором находится код Python.

Хотя, начиная с Python версии 3.3 и далее, потребность в явном определении модулей как таковых исчезла, хотя в некоторых случаях придерживаться старого способа ведения дел может оказаться правильным и уменьшить появление определенных ошибок; вот аргумент, почему вам, возможно, все же придется включить файл __init__.py:

Не требуется ли __init__.py для пакетов в Python 3.3+

Если это не решит проблему, то есть если ошибка все еще сохраняется, проблема может быть связана с вашим новым дополнением к пути Python, то есть к каталогу приложения.

Другие вопросы по теме