关于Windows部署scrapyd项目报错的两个问题

在windows环境中,当我们需要部署scrapy项目到服务器时,常用到scrapyd,作为部署管理工具,在服务器端安装scrapyd并运行后,就可以正常使用。但是,当我们需要将windows本地的scrapy项目部署到服务器上时,需要安装scrapyd-client,用于打包项目,并发送给远程的scrapyd。

第一个问题
pip install scrapyd-client 后。在cmd中运行部署命令,scrapyd-deploy 却提示:

‘scrapyd-deploy’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

在python目录的Scripts目录下,能找到一个scrapy-deploy的文件,但是无法运行。下面来讲解决办法:

  1. 进到C:/python36/Scripts 目录下,创建两个新文件:
    scrapy.bat 文件
    scrapyd-deploy.bat 文件

  2. 编辑两个文件:

scrapy.bat文件中输入以下内容 :

@echo off
C:\Python36\python.exe C:\Python36\Scripts\scrapy %*

scrapyd-deploy.bat 文件中输入以下内容:

@echo off
C:\Python36\python.exe C:\Python36\Scripts\scrapyd-deploy %*
  1. 保存退出,并确保你的 C:/python 和C:/python/Scripts 都在环境变量。这样就可以正常运行scrapy-deploy命令了。

第二个问题:
执行scrapyd-deploy -h 提示报错

C:\Users\Administrator>scrapyd-deploy
Traceback (most recent call last):
  File "C:\Python36\Scripts\scrapyd-deploy", line 23, in <module>
    from scrapy.utils.http import basic_auth_header
ModuleNotFoundError: No module named 'scrapy.utils.http'

由于底层scrapyd-deploy的模块scrapy.utils.http已经弃用,建议更新为w3lib.http替代
打开文件"C:\Python36\Scripts\scrapyd-deploy",注释第23行,修改如下:

from scrapy.utils.project import inside_project
#from scrapy.utils.http import basic_auth_header
from w3lib.http import basic_auth_header
from scrapy.utils.python import retry_on_eintr
from scrapy.utils.conf import get_config, closest_scrapy_cfg

重新执行已解决。
C:\Users\Administrator>scrapyd-deploy -h

Usage: scrapyd-deploy [options] [ [target] | -l | -L <target> ]

Deploy Scrapy project to Scrapyd server

Options:
  -h, --help            show this help message and exit
  -p PROJECT, --project=PROJECT
                        the project name in the target
  -v VERSION, --version=VERSION
                        the version to deploy. Defaults to current timestamp
  -l, --list-targets    list available targets
  -a, --deploy-all-targets
                        deploy all targets
  -d, --debug           debug mode (do not remove build dir)
  -L TARGET, --list-projects=TARGET
                        list available projects on TARGET
  --egg=FILE            use the given egg, instead of building it
  --build-egg=FILE      only build the egg, don't deploy it
上一篇:Nginx 搭建LVS-DR模式


下一篇:阿里云ONS和微软Azure Service Bus的架构和特性比较