Импорт функций в другой файл при использовании scrapyd

Я создаю сканер с помощью scrapy и запускаю его на удаленной машине, на которой работает scrapyd. Мой паук довольно длинный и сложный, поэтому я поместил некоторые функции в другой файл def.py.

Мой проект выглядит так

./
|-- my_project
|   |-- __init__.py
|   |-- items.py
|   |-- pipelines.py
|   |-- settings.py
|   `-- spiders
|       |-- __init__.py
|       |-- spider.py
`-- scrapy.cfg
`-- def.py

Я импортирую свою функцию в свой паук со следующим кодом

from def.py import get_questions

и использовать его в моем пауке.

Он отлично работает на моем локальном компьютере, но если я отправлю запрос на сканирование в scrapyd, он не сможет найти def.py. (ImportError)

Я использую scrapyd-deploy из пакета pypi scrapyd-client

scrapyd-deploy my_spider

Можно ли включить файл def.py или включить функции при отправке запроса на scrapyd?

Я бы предпочел не иметь паука с сотнями строк кода.


person bwayne    schedule 04.08.2015    source источник
comment
Вы пытались поместить свой def.py в папку spider? вы все еще можете импортировать его, используя projectname.spiders.def import def.py   -  person William Kinaan    schedule 04.08.2015


Ответы (1)


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

scrapyd-deploy развертывает только те файлы, которые находятся внутри вашего проекта, поэтому переместите файл с функциями util внутрь вашего проекта, и он будет развернут в scrapyd.

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

person Elias Dorneles    schedule 04.08.2015