Scrapyd无法在子目录中找到代码

Spa*_*man 5 scrapy 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
Run Code Online (Sandbox Code Playgroud)

如果我们从命令行运行它,一切都很好 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 *

......没有任何效果.虽然它可以使用scrapy crawl从命令行"直接"执行运行.

我们该怎么做才能让它发挥作用?

谢谢!

Spa*_*man 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"],
    }
)
Run Code Online (Sandbox Code Playgroud)

这有点奇怪,因为代码实际上就是数据......但它对我们有用。

感谢您的关注。解决了。