Позвольте мне начать с того, что я посмотрел несколько ответов по 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) ".
Я не уверен, что это значит ... не уверен, что я должен это делать, после того как все это приложение должно быть загружено и запущено.