使用外部包部署 scrapyd spider

Deploy scrapyd spider with external packages

scrapyd 文档包括以下说明:

scrapyd-deploy won’t deploy anything outside the project module...

这是否意味着我无法从我的蜘蛛程序中导入站点包?

我的蜘蛛程序依赖外部库,例如 MySQL-python 和 tldextract。我必须在项目模块中包含这些库并从包含库而不是站点包导入吗?

我认为 Deploying your project 文档段落应该澄清一些事情:

Finally, to deploy your project use:

scrapyd-deploy scrapyd -p project1

This will eggify your project and upload it to the target, printing the JSON response returned from the Scrapyd server. If you have a setup.py file in your project, that one will be used. Otherwise a setup.py file will be created automatically (based on a simple template) that you can edit later.

换句话说,您 would/should 具有 MySQL-pythontldextractsetup.py 中列出的其他依赖项,它们将在部署期间自动安装。

我发现一些证据(即 gitHub 帖子 here and here)表明不支持(也不会)支持通过 'setup.py' 文件安装自定义包。由于我在 docker 容器中 运行 scrapyd,我的解决方法是:

  1. 通过在 Dockerfile 中调用 pip install <package>,确保必要的外部 Python 包安装在 scrapyd 容器中。
  2. 在容器中创建一个绑定挂载,它链接到 scrapy 项目目录外部的任何自定义模块。我在 docker-compose 文件中为我的 scrapyd 服务输入了以下几行(请注意,必须在容器的“/tmp”目录中创建挂载点):
volumes:         
  - custom_module:/tmp/custom_module