ModuleNotFoundError: При попытке запустить юнит-тест с помощью Scrapy - PullRequest
0 голосов
/ 06 ноября 2019

Позвольте мне начать с того, что я посмотрел несколько ответов по SE, и ни один из них не решил мою проблему.

У меня есть приложение scrapy с обычной структурой

new_project/
    new_project/
        spiders/
            __init__.py
            my_spyder.py
        tests/
            __init__.py
            test_my_spyder.py
    __init__.py
    items.py
    middlewares.py
    ...
scrapy.cfg

в моем test_my_spyder.py Мне нужны классы из my_spyder.py и items.py, поэтому мой кодэто:

import unittest

from scrapy.http import Request, HtmlResponse

from new_project.spiders import MyOwnSpider
from new_project.items import MyItem

class TestMySpyderSpider(unittest.TestCase):

    def test_something(self):
        ...

Если я использую python -m unittest test_my_spyder из каталога new_project/, я получаю

ModuleNotFoundError: Нет модуля с именем 'test_my_spyder'

Однако, если я запускаю ту же команду из каталога tests/, возвращается:

из new_project.spiders import MyOwnSpider

ModuleNotFoundError: Нет модуля с именем 'new_project'

Команда scrapy crawl spider-name отлично работает.

-

Теперь все, что я пробовал:

1: Пробовал это внутри test_my_spyder.py, без разницы.

import sys, os
sys.path.insert(0, os.path.dirname(__file__))

2: С этим или без, без разницы:

if __name__ == '__main__':

    unittest.main()

3: Все эти варианты:

from new_project.new_project.spiders import MyOwnSpider
from spiders import MyOwnSpider
from spiders.my_spyder import MyOwnSpider #ModuleNotFoundError: No module named 'spiders'
from .spiders.my_spyder import MyOwnSpider #ImportError: attempted relative import with no known parent package
from ..spiders.my_spyder import MyOwnSpider #ImportError: attempted relative import with no known parent package

Кроме того, я нашел много мест, где люди упоминают: «Добавить путь к папке в переменную среды (PYTHONPATH) ".

Я не уверен, что это значит ... не уверен, что я должен это делать, после того как все это приложение должно быть загружено и запущено.

...