Scrapyd не может найти код в подкаталоге

У нас есть вполне нормальный Scrapy-проект, что-то вроде этого:

project/
       setup.py
       scrapy.cfg
       SOME_DIR_WITH_PYTHON_MODULE/
                                  __init__.py
       project/
              settings.py
              pipelines.py
              __init__.py
              spiders/
                     __init__.py
                     somespider.py

Все отлично работает, если мы запускаем его из командной строки scrapy crawl somespider...

Но когда мы развернем его и запустим с помощью Scrapyd, он просто не сможет импортировать код из SOME_DIR_WITH_PYTHON_MODULE. Похоже, он не видит код там по каким-то неизвестным причинам.

Мы попытались импортировать его в файл Pipelines.py. Пробовал так:

from project.SOME_DIR_WITH_PYTHON_MODULE import *

и так:

from SOME_DIR_WITH_PYTHON_MODULE import *

...и ничего не получилось. Хотя это работало, если запускалось из командной строки «прямого» выполнения с использованием краудсорсинга.

Что мы должны сделать, чтобы заставить его работать?

Спасибо!


person Spaceman    schedule 31.01.2015    source источник


Ответы (1)


Собственно, я нашел причину. Я должен был использовать параметр data_files:

setup(
    name='blabla',
    version='1.0',
    packages=find_packages(),
    entry_points={'scrapy': ['settings = blabla.settings']},
    zip_safe=False,
    include_package_data=True,
    data_files=[(root, [os.path.join(root, f) for f in files])
         for root, _, files in itertools.chain(os.walk('monitoring'),
                                               os.walk('blabla/data'))],
    install_requires=[
        "Scrapy>=0.22",
    ],
    extras_require={
        'Somemodule': ["numpy"],
    }
)

Это немного странно, потому что на самом деле код — это данные... но у нас это сработало.

Спасибо за внимание. Решено.

person Spaceman    schedule 11.02.2015